Newer
Older
TIASJudgeModel / .claude / hooks / run_python.sh
#!/usr/bin/env bash
# Python フックの起動ラッパー.
# 使い方: bash .claude/hooks/run_python.sh [--fail-closed] <script.py> [args...]
#
# 環境ごとに Python のコマンド名が異なるため (Debian/Ubuntu 系・macOS は python3 のみ,
# Windows の python.org 版は python / py のみで python3 は Microsoft Store を開くダミー),
# python3 -> python -> py の順に実際に起動できるものを探して exec する.
# exec するのでスクリプトの終了コード (PreToolUse のブロック = 2 等) はそのまま伝わる.
#
# Python が見つからない場合:
#   --fail-closed あり: exit 2 (PreToolUse ではツール実行をブロックする. アクセス制限フック用)
#   --fail-closed なし: exit 1 (非ブロックエラー. 通知フック等は素通りさせる)

fail_code=1
if [ "$1" = "--fail-closed" ]; then
  fail_code=2
  shift
fi

for py in python3 python py; do
  command -v "$py" >/dev/null 2>&1 || continue
  # ダミー (Microsoft Store のエイリアス等) を除外するため実際に起動できるか確認する
  "$py" -c '' </dev/null >/dev/null 2>&1 || continue
  exec "$py" "$@"
done

if [ "$fail_code" -eq 2 ]; then
  echo "Python(python3 / python / py)が見つからないためツール実行をブロックしました.Python 3.7 以上をインストールしてください" >&2
else
  echo "Python(python3 / python / py)が見つからないためフックをスキップしました: $1" >&2
fi
exit "$fail_code"