Bash
如何讓 bash 腳本對 each 命令的錯誤執行特定操作?
與
set -e
執行exit
on “uncaught”$? != 0
類似,我想讓這個事件觸發另一個命令的執行,例如logger
呼叫。如何才能做到這一點?
正如this question
trap
中所暗示的,答案是在信號上設置一個ERR
-基本上set -e
對應trap 'exit' ERR
。因此,例如記錄錯誤但繼續執行,請使用trap 'logger -t myscriptname "Command $BASH_COMMAND exited with code $?"' ERR
在 bash 中,變數
$BASH_COMMAND
包含有問題的命令。$?
包含最後執行的命令的退出程式碼 - 請注意,如果您要執行多個操作,例如logger ...; echo $?
,$?
將包含logger
’ 退出程式碼,而不是$BASH_COMMAND
’,因此您可能必須先將其儲存在變數中,例如trap 'EXITCODE=$?; logger -t "Command $BASH_COMMAND exited with code $EXITCODE"; echo "$BASH_COMMAND at line $LINENO exited with code $EXITCODE"' ERR
當然,您最好聲明一個函式並將其傳遞給
$?
and$BASH_COMMAND
而不是這麼長的一行!