bash-style について
bash-styleは、Bashスクリプトや文書内のシェルコマンド向けの規約スキルです。コメント、ファイル書き込み、ヒアドキュメント、権限、変数、安全な削除を扱います。
主な機能
- 01コメントとコードブロックの規約
- 02teeによるファイル書き込み
- 03ヒアドキュメントの引用と展開
- 04権限、パス、スクリプト設定
- 05変数の扱いと安全な削除
活用シーン
- 01Bashスクリプトや文書内コマンドの作成
- 02意図しない展開を避けた設定ファイル作成
- 03権限、パス、削除コマンドの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ doccker/ cc-use-exp --skill bash-styleインストール後、Claude Code で/bash-styleを入力して読み込まれたか確認します。
詳細
Bash 作成規約
バージョン:v1.0 更新:2026-01
1. コメントの規約
行末コメントの禁止
- ❌ 行末コメントは禁止です(例:
command # コメント) - ✅ コメントは独立した行に記述し、コードの上に配置します
適用範囲:
- シェルスクリプトファイル(.sh)
- Markdown ドキュメント内の bash コードブロック
- Dockerfile、Makefile 内のシェルコマンド
# ❌ 错误:行尾注释
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/
理由:
- コピー&ペースト時にコメントまで含まれ、コマンドがエラーになる可能性があります
- 長いコマンド+コメントは行が長くなりすぎ、可読性が低下します
- Heredoc ブロック内の
#はコメントではなく内容です
2. ファイルへの書き込み方法
推奨する方法:tee コマンド
# ✅ 推荐:简洁、无嵌套引号
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 | 事前に検証できます | 手順が多くなります | 複雑な設定 |
3. Heredoc の引用符ルール
変数展開を禁止する(デフォルトで推奨)
# ✅ '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' | より安全です |
4. 権限とパス
root 権限が必要な場合
# ✅ 正确: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
5. スクリプトの規約
ファイルヘッダー
#!/usr/bin/env bash
set -euo pipefail
# 脚本说明(一句话)
set オプションの説明
| オプション | 役割 |
|---|---|
-e | コマンドが失敗したときに終了します |
-u | 未定義の変数を使用したときにエラーにします |
-o pipefail | パイプ内のいずれかのコマンドが失敗すると、全体を失敗とします |
変数の使用
# ✅ 推荐:使用 ${} 包裹
echo "Hello, ${name}"
# ✅ 推荐:设置默认值
db_host="${DB_HOST:-localhost}"
# ❌ 避免:裸变量(易与后续字符混淆)
echo "Hello, $name_suffix"
6. よく使われるパターン
コマンドの存在確認
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/*
7. ドキュメント内のコードブロック
Markdown ドキュメントに bash コマンドを記述する場合も、上記の規約に従います:
## 安装配置
创建配置文件:
```bash
sudo tee /etc/myapp/config.yml > /dev/null << 'EOF'
server:
port: 8080
host: 0.0.0.0
EOF
```
参考資料
コメント
Markdown 対応