Bash

bash 腳本末尾的退出程式碼

  • July 17, 2020

我對 bash 腳本末尾的退出程式碼的含義感到困惑:我知道退出程式碼 0 意味著它成功完成,並且還有更多退出程式碼編號(如果我沒記錯的話,是 127?)

我的問題是,當在腳本末尾看到退出程式碼 0 時,即使腳本失敗,它是否會強制退出程式碼為 0 還是有其他含義?

內置命令exit退出 shell(來自Bash 的參考):

exit [n]

退出 shell,將狀態 n 返回給 shell 的父級。如果省略 n,則退出狀態為最後執行的命令的狀態。EXIT 上的任何陷阱都會在 shell 終止之前執行。

執行到文件末尾也會退出,返回最後一個命令的返回碼,所以是的,exit 0無論前面命令的退出狀態如何,最終都會使腳本以成功狀態退出。(也就是說,假設腳本到達 final exit。)在腳本結束時,您還可以使用true:獲得退出程式碼為零。

當然,您更經常使用exitfrom inside anif在中間結束腳本。

這些應該列印一個 1 ($?包含上一個命令返回的退出程式碼):

sh -c "false" ; echo $?
sh -c "false; exit" ; echo $?

雖然這應該列印一個 0:

sh -c "false; exit 0" ; echo $?

我不確定執行時腳本“失敗”的概念是否exit有意義,因為腳本執行的某些命令很可能會失敗,但腳本本身會成功。由腳本的作者決定什麼是成功,什麼不是。

此外,退出程式碼的標準範圍是 0..255。shell 使用 127 以上的程式碼來指示程序被信號終止,但它們可以以通常的方式返回。系統wait呼叫實際上返回一個更寬的值,其餘的包含作業系統設置的狀態位。

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