Bash
如何讓 Bash 使用給定的退出程式碼退出
為什麼下面會列印 0?我預計它會列印 1234。
$ bash -c exit 1234 $ echo $?
bash -c exit 1234
-c
使用單獨的參數、exit
和1234
執行bash-c
使用緊隨其後的參數,因此 bashexit
只執行;1234
用作第一個位置參數($0
,外殼的名稱)。要讓 bash 使用給定的程式碼退出,您需要引用整個命令:
bash -c "exit 1234"
請注意,bash 退出狀態限制為 0-255,因此這會產生 210 (1234 % 256) 的退出狀態。
即使您將程式碼修復為執行而不是單獨執行,您也不能使用
bash
’s builtin,因為它會自行將值截斷為 8 位:exit``exit 1234``exit``bash
$ strace -e exit_group bash -c 'exit 1234' exit_group(210) = ?
您需要在同一程序中執行另一個可以以任意值退出的命令:
$ strace -e exit_group bash -c 'exec perl -e "exit 1234"' exit_group(1234) = ?
$ strace -e exit_group bash -c 'exec zsh -c "exit 1234"' exit_group(1234) = ?
在任何情況下,請注意,某些系統(如 Linux)不允許父程序訪問該退出狀態的完整值,即使使用API 或POSIX 要求不截斷它
waitid()
的 SIGCHLD處理程序也是如此。sigaction()
更多詳情請訪問: