如何让 bash 脚本对 _each_ 命令的错误执行特定操作?

如何让 bash 脚本对 _each_ 命令的错误执行特定操作?

set -e与执行exiton "uncaught"类似$? != 0,我希望此事件触发另一个命令的执行,例如呼叫logger。如何才能做到这一点?

答案1

正如暗示的那样这个问题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而不是这么长的一行!

相关内容