| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- : << 'CMDBLOCK'
- @echo off
- REM Cross-platform polyglot wrapper for hook scripts.
- REM On Windows: cmd.exe runs the batch portion, which finds and calls bash.
- REM On Unix: the shell interprets this as a script (: is a no-op in bash).
- REM
- REM Hook scripts use extensionless filenames (e.g. "session-start" not
- REM "session-start.sh") so Claude Code's Windows auto-detection -- which
- REM prepends "bash" to any command containing .sh -- doesn't interfere.
- REM
- REM Usage: run-hook.cmd <script-name> [args...]
- if "%~1"=="" (
- echo run-hook.cmd: missing script name >&2
- exit /b 1
- )
- set "HOOK_DIR=%~dp0"
- REM Try Git for Windows bash in standard locations
- if exist "C:\Program Files\Git\bin\bash.exe" (
- "C:\Program Files\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
- exit /b %ERRORLEVEL%
- )
- if exist "C:\Program Files (x86)\Git\bin\bash.exe" (
- "C:\Program Files (x86)\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
- exit /b %ERRORLEVEL%
- )
- REM Per-user Git for Windows installer ("Only for me" / winget user scope)
- if exist "%LOCALAPPDATA%\Programs\Git\bin\bash.exe" (
- "%LOCALAPPDATA%\Programs\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
- exit /b %ERRORLEVEL%
- )
- REM Scoop user install (`scoop install git`)
- if exist "%USERPROFILE%\scoop\apps\git\current\usr\bin\bash.exe" (
- "%USERPROFILE%\scoop\apps\git\current\usr\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
- exit /b %ERRORLEVEL%
- )
- REM Try bash on PATH (e.g. user-installed Git Bash, MSYS2, Cygwin). Note that
- REM on stock Windows 10/11 `where bash` resolves to C:\Windows\System32\bash.exe
- REM (the WSL launcher), which fails on Windows-style script paths. The explicit
- REM probes above must therefore be exhausted first.
- where bash >nul 2>nul
- if %ERRORLEVEL% equ 0 (
- bash "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
- exit /b %ERRORLEVEL%
- )
- REM No bash found - exit silently rather than error
- REM (plugin still works, just without SessionStart context injection)
- exit /b 0
- CMDBLOCK
- # Unix: run the named script directly
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
- SCRIPT_NAME="$1"
- shift
- exec bash "${SCRIPT_DIR}/${SCRIPT_NAME}" "$@"
|