Bash
bash 腳本末尾的退出程式碼
我對 bash 腳本末尾的退出程式碼的含義感到困惑:我知道退出程式碼 0 意味著它成功完成,並且還有更多退出程式碼編號(如果我沒記錯的話,是 127?)
我的問題是,當在腳本末尾看到退出程式碼 0 時,即使腳本失敗,它是否會強制退出程式碼為 0 還是有其他含義?
內置命令
exit
退出 shell(來自Bash 的參考):
exit [n]
退出 shell,將狀態 n 返回給 shell 的父級。如果省略 n,則退出狀態為最後執行的命令的狀態。EXIT 上的任何陷阱都會在 shell 終止之前執行。
執行到文件末尾也會退出,返回最後一個命令的返回碼,所以是的,
exit 0
無論前面命令的退出狀態如何,最終都會使腳本以成功狀態退出。(也就是說,假設腳本到達 finalexit
。)在腳本結束時,您還可以使用true
或:
獲得退出程式碼為零。當然,您更經常使用
exit
from 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
呼叫實際上返回一個更寬的值,其餘的包含作業系統設置的狀態位。