Bash

如何讓 bash 腳本對 each 命令的錯誤執行特定操作?

  • April 27, 2016

set -e執行exiton “uncaught”$? != 0類似,我想讓這個事件觸發另一個命令的執行,例如logger呼叫。如何才能做到這一點?

正如this questiontrap中所暗示的,答案是在信號上設置一個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而不是這麼長的一行!

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