Triggered when the user edits .sh, Dockerfile, Makefile, .yml/.yaml files or writes bash code blocks in Markdown. Provides Bash style guidelines.
版本:v1.0 更新:2026-01
command # 注释)适用范围:
# ❌ 错误:行尾注释
curl -X POST https://api.example.com/data # 发送请求
docker run -d nginx # 启动容器
cp -r src/ dist/ # 复制文件
# ✅ 正确:注释独占一行
# 发送请求
curl -X POST https://api.example.com/data
# 启动容器
docker run -d nginx
# 复制文件
cp -r src/ dist/
原因:
# 不是注释而是内容# ✅ 推荐:简洁、无嵌套引号
sudo tee /etc/fail2ban/jail.d/docker-nginx.local > /dev/null << 'EOF'
[docker-nginx]
enabled = true
filter = docker-nginx
logpath = /var/log/nginx/access.log
maxretry = 5
EOF
# ✅ 追加到文件
sudo tee -a /etc/hosts > /dev/null << 'EOF'
192.168.1.100 myserver
EOF
# ✅ 单行追加
echo '192.168.1.100 myserver' | sudo tee -a /etc/hosts
# ❌ 避免:嵌套引号复杂,易出错
sudo bash -c 'cat > /etc/xxx << EOF
content
EOF'
# ❌ 避免:需要转义内容中的特殊字符
sudo sh -c "echo 'line1\nline2' > /etc/xxx"
| 方式 | 优点 | 缺点 | 推荐场景 |
|------|------|------|---------|
| sudo tee | 简洁、无嵌套 | 需 > /dev/null 抑制输出 | 首选 |
| sudo bash -c 'cat >' | 无需 tee | 嵌套引号复杂 | 不推荐 |
| 临时文件 + mv | 可先验证 | 步骤多 | 复杂配置 |
# ✅ 'EOF' 带引号:内容原样输出,不解析变量
sudo tee /etc/xxx > /dev/null << 'EOF'
$HOME 不会被展开
$(command) 不会被执行
EOF
# EOF 不带引号:变量会被展开
sudo tee /etc/xxx > /dev/null << EOF
当前用户: $USER
当前目录: $(pwd)
EOF
| 场景 | 用法 | 原因 |
|------|------|------|
| 配置文件 | << 'EOF' | 避免意外展开 |
| 模板生成 | << EOF | 需要插入变量 |
| 不确定时 | << 'EOF' | 更安全 |
# ✅ 正确:tee 配合 sudo
echo 'content' | sudo tee /etc/xxx
# ❌ 错误:重定向在 sudo 之外,权限不足
sudo echo 'content' > /etc/xxx
# ✅ 正确:双引号包裹路径
sudo tee "/etc/my config/file.conf" > /dev/null << 'EOF'
content
EOF
#!/usr/bin/env bash
set -euo pipefail
# 脚本说明(一句话)
| 选项 | 作用 |
|------|------|
| -e | 命令失败时退出 |
| -u | 使用未定义变量时报错 |
| -o pipefail | 管道中任一命令失败则整体失败 |
# ✅ 推荐:使用 ${} 包裹
echo "Hello, ${name}"
# ✅ 推荐:设置默认值
db_host="${DB_HOST:-localhost}"
# ❌ 避免:裸变量(易与后续字符混淆)
echo "Hello, $name_suffix"
if ! command -v docker &> /dev/null; then
echo "docker 未安装"
exit 1
fi
# 文件存在
[[ -f /path/to/file ]] && echo "文件存在"
# 目录存在
[[ -d /path/to/dir ]] || mkdir -p /path/to/dir
# ✅ 使用变量时防止误删
rm -rf "${dir:?}"/*
# ❌ 危险:变量为空时会删除根目录
rm -rf $dir/*
在 Markdown 文档中编写 bash 命令时,同样遵循以上规范:
## 安装配置
创建配置文件:
```bash
sudo tee /etc/myapp/config.yml > /dev/null << 'EOF'
server:
port: 8080
host: 0.0.0.0
EOF
```
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer