Bash
有沒有辦法讓我的 bash 腳本中的函式在任何命令錯誤時自動執行?
我正在編寫一個需要執行一系列命令的 shell 腳本,並且每個命令都依賴於之前的每個命令。如果任何命令失敗,整個腳本都應該失敗,我呼叫一個退出函式。我可以檢查每個命令的退出程式碼,但我想知道是否有可以啟用的模式或讓 bash 自動執行此操作的方法。
例如,使用以下命令:
cd foo || myfunc rm a || myfunc cd bar || myfunc rm b || myfunc
有沒有一種方法可以讓我在執行這些命令之前以某種方式向 shell 發出信號,如果它們中的任何一個失敗,它應該呼叫 myfunc ,這樣我就可以寫一些更乾淨的東西,比如:
cd foo rm a cd bar rm b
如果任何命令返回的狀態大於零,您可以使用 bash陷阱 ERR使腳本退出,並在退出時執行您的函式。
就像是:
myfunc() { echo 'Error raised. Exiting!' } trap 'myfunc' ERR # file does not exist, causing error ls asd echo 123
請注意,bash 陷阱
ERR
確實是隱式的set -o errexit
,或者set -e
不是 POSIX。
ERR
如果失敗的命令是緊跟在until
orwhile
關鍵字之後的命令列表的一部分、在if
orelif
保留字之後的測試的一部分、在&&
or||
列表中執行的命令的一部分,或者如果命令的返回狀態正在反轉,則陷阱不會執行!
.