我正在尝试从shell脚本中删除一些bashisms。
我无法弄清楚我将如何复制'陷阱ERR':ERR不是信号,不在standard中,而是一种常见的基础(参见例如the LDP guide)。
如何在符合标准的trap ERR
脚本中复制/bin/sh
?
答案 0 :(得分:4)
您可以使用set -e
和trap ... EXIT
的组合。
#!/bin/sh
set -e
err_handler () {
[ $? -eq 0 ] && exit
# Code for non-zero exit status here
}
trap err_handler EXIT
每当无人看守的命令具有非零退出状态时, set -e
将导致脚本退出。当脚本退出时,将无条件地调用错误处理程序,但在处理程序内部,如果当前退出状态为0,则只需退出,即我们在没有任何错误的情况下到达它。
“unguarded”命令是指一个命令,它不会在合理预期发生非零退出状态的上下文中运行,例如在if
语句的条件下。
答案 1 :(得分:0)