您可以使用的组合set -e和trap ... EXIT。
#!/bin/sh
set -e
err_handler () {
[ $? -eq 0 ] && exit
# Code for non-zero exit status here
}
trap err_handler EXIT
Run Code Online (Sandbox Code Playgroud)
set -e每当不受保护的命令的退出状态为非零时,它将导致脚本退出。当脚本退出时,错误处理程序将被无条件调用,但是如果当前退出状态为0,则可以在该处理程序内部简单地退出,即我们到达该错误处理程序而没有发生任何错误。
所谓“不受保护的”命令,是指不在合理预期会出现非零退出状态(例如在if语句条件下)的上下文中不运行的命令。