Skip to content

原文(日本語に翻訳)

フックの if: "Bash(...)" 条件が $()$VAR を含むすべての Bash コマンドに対して発火する問題を修正。パターンがサブシェルやバッククォート内のコマンドとも照合されるようになりました。

原文(英語)

Fixed hook if: "Bash(...)" conditions firing on every Bash command containing $() or $VAR; the pattern now matches against commands inside subshells and backticks too

概要

フック設定の if: "Bash(...)" 条件(Bash コマンドの内容に基づいてフックを条件発火させる仕組み)が、$()$VAR を含むすべてのコマンドに誤って発火するバグが修正されました。修正後は、サブシェル($())やバッククォート(`)内のコマンドに対しても正しくパターンマッチングが行われます。

基本的な使い方

フック設定の if 条件が期待通りに動作するようになりました:

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo 'git コマンドが実行されます'",
            "if": "Bash(git)"
          }
        ]
      }
    ]
  }
}

修正前は git に関係のない $VAR を含むコマンドでもこのフックが発火していましたが、修正後は git を含むコマンドのみで正しく発火します。

実践例

特定のコマンドのみでフックを発火させる

json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo '本番デプロイを検出しました!'",
            "if": "Bash(deploy.*production)"
          }
        ]
      }
    ]
  }
}

修正前:RESULT=$(some_command) のような $() を含む無関係なコマンドでもフックが発火 修正後:deploy.*production にマッチするコマンドのみで発火

サブシェル内のコマンドに対するマッチング

bash
# このコマンドを実行した場合:
FILE_LIST=$(find . -name "*.py")

# 修正後は if: "Bash(find)" のフックが
# サブシェル内の find コマンドに対しても正しくマッチする

注意点

  • if: "Bash(...)" の括弧内は正規表現パターンです。
  • この修正により、サブシェル($())やバッククォート(`)の内側のコマンドもパターンマッチングの対象になりました。これは意図した動作の改善です。
  • フックの条件が期待外れの挙動をしていた場合、この修正後に動作が変わる可能性があります。既存のフック設定の動作を確認することをお勧めします。

関連情報