非bash相当于“陷阱ERR”

时间:2015-04-03 06:35:09

标签: bash shell

我正在尝试从shell脚本中删除一些bashisms。

我无法弄清楚我将如何复制'陷阱ERR':ERR不是信号,不在standard中,而是一种常见的基础(参见例如the LDP guide)。

如何在符合标准的trap ERR脚本中复制/bin/sh

2 个答案:

答案 0 :(得分:4)

您可以使用set -etrap ... 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)