set -e
与执行exit
on "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
而不是这么长的一行!