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