check-bash.sh
예시 — check-bash.sh 사전 차단 hook
섹션 제목: “예시 — check-bash.sh 사전 차단 hook”.claude/hooks/check-bash.sh:
#!/usr/bin/env bashset -euo pipefail
# stdin으로 PreToolUse 컨텍스트(JSON) 수신ctx=$(cat)cmd=$(echo "$ctx" | jq -r '.tool_input.command // ""')
deny_patterns=( 'rm -rf' 'rm -fr' '\bsudo\b' 'mkfs' 'dd +of=/dev/' ':\(\)\{ *:\|:& *\};:' '> +/dev/sda' 'curl .* \| *(sh|bash)')
for p in "${deny_patterns[@]}"; do if echo "$cmd" | grep -Eq "$p"; then echo "blocked: pattern '$p' matched in command: $cmd" >&2 exit 1 fidone
exit 0.claude/settings.json:
{ "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [{"type":"command","command":".claude/hooks/check-bash.sh"}] } ] }}이 hook이 있어도 권한 게이트의 deny 리스트를 동시에 두는 것을 권한다 — 두 보호선 원칙(4챕터).