2012-02-18 3 views
5

나는이 성공적으로 같은 디렉토리에 pre-commit-hook.ps1 파일의 코드를 실행하지만 출구를 캡처하지 않습니다파워 쉘 힘내 후크 종료 코드

#!/bin/sh 
exec c:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -ExecutionPolicy RemoteSigned -Command " Get-Location | % { '$_\pre-commit-hook.ps1'} | % { & $_ }" 
exit 

파일 미리 커밋/내 .git/후크에 다음이 암호. tldp.org에 따르면 exit 만 지정된 경우 마지막 종료 코드가 반환됩니다. 종료 코드가 0이 아닌 경우에는 Git 후크가 실패하지만 powershell 스크립트가 상태 코드 1을 반환하더라도 항상 성공합니다. 후크가 제대로 작동하도록 powershell 스크립트에서 종료 코드를 캡처하려면 어떻게해야합니까?

+0

그런 짓을해야 할 수도 있습니다 : 종료 (1)'를 반환 0이 아닌 코드를 호출자에게 보냅니다. 이 작품은 내 대답을 만들거야 :-) –

+0

아무 것도 작동하지 않습니다. 나는 이미 내 스크립트에서 'exit 1'을 가졌지 만 어느 쪽도 작동하지 않았다. –

+0

나는 당신을 생각했다 ... 가끔은 [작동하지 않기 때문에] (http://stackoverflow.com/questions/8902004/powershell -fails-to-return-proper-exit-code/8902329 # 8902329). –

답변

6

ps1 스크립트의 호출을 간단하게 유지하면 제대로 작동해야합니다. 나를 위해 다음 작품 :

#!/bin/sh 
echo 
exec powershell.exe -ExecutionPolicy RemoteSigned -File '.\.git\hooks\pre-commit-hook.ps1' 
exit 

는 PS1 스크립트는 단지 exit 1을 가지고 있었고 일어나지 않았다 커밋합니다. 당신이 -command 같은 물건을하고있는

가, 파워 쉘은 제대로 작동하는 것으로 알려져되지 않으며, 당신은 당신의 스크립트 시도가`[환경] 추가에 -command {& .\test.ps1; exit $lastexitcode}

+1

그래도 효과가 있습니다. 여기서 핵심은 "사전 커밋"자체가 이미 .git/hooks에서 실행 중이더라도 현재 디렉토리가 프로젝트의 루트라는 것입니다. 그건 분명히 문서에 없습니다;) –