Skip to content

Bash権限ルールで引用符内の#を含む引数がマッチしない問題の修正

原文(日本語に翻訳)

Bash(cmd:*) 権限ルールが、引用符付き引数に # が含まれている場合にマッチしない問題を修正

原文(英語)

Fixed Bash(cmd:*) permission rules not matching when a quoted argument contains #

概要

Claude Codeの権限システムにおいて、Bash(cmd:*) 形式の許可ルールが、コマンド引数に # 文字が含まれている場合に正しくマッチしないバグが修正されました。# がシェルのコメント開始文字として解釈され、引用符で囲まれていてもパターンマッチングに失敗していたことが原因です。この修正により、# を含む引数を持つコマンドでも許可ルールが正しく適用されるようになりました。

基本的な使い方

.claude/settings.json で以下のような権限ルールを設定している場合に関係します:

json
{
  "permissions": {
    "allow": [
      "Bash(git:*)",
      "Bash(curl:*)",
      "Bash(grep:*)"
    ]
  }
}

実践例

Gitでissue番号を含むコミットメッセージ

# はGitHubのissue番号で頻繁に使われます。修正前は以下のようなコマンドで毎回権限確認が表示されていました:

bash
# 修正前:Bash(git:*) ルールがあっても権限確認が表示される
git commit -m "Fix login bug #1234"

# 修正後:Bash(git:*) ルールにより自動許可される
git commit -m "Fix login bug #1234"

curlでフラグメント付きURLを使用

URLのフラグメント(#)を含むcurlコマンドでも同様の問題がありました:

bash
# 修正前:Bash(curl:*) ルールがあっても権限確認が表示される
curl "https://example.com/docs#section-2"

# 修正後:正しく自動許可される
curl "https://example.com/docs#section-2"

grepでリテラルの#を検索

コード中のコメント行を検索する場合:

bash
# 修正前:Bash(grep:*) ルールがあっても権限確認が表示される
grep -r "# TODO" ./src

# 修正後:正しく自動許可される
grep -r "# TODO" ./src

注意点

  • v2.1.76以降で修正済み: このバグはv2.1.76で修正されています。それ以前のバージョンでは # を含む引数を持つコマンドで不要な権限確認が発生します
  • 引用符の種類は問わない: ダブルクォート(")でもシングルクォート(')でも、# を含む引数が正しくマッチするようになりました
  • セキュリティへの影響なし: この修正は許可ルールのパターンマッチングの改善であり、セキュリティモデル自体には変更ありません
  • 既存の設定はそのまま利用可能: 設定ファイルの変更は不要で、アップデートするだけで修正が適用されます

関連情報