Bash

如何讓 Bash 使用給定的退出程式碼退出

  • October 10, 2022

為什麼下面會列印 0?我預計它會列印 1234。

$ bash -c exit 1234
$ echo $?
bash -c exit 1234

-c使用單獨的參數、exit1234執行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()

更多詳情請訪問:

引用自:https://unix.stackexchange.com/questions/720407