我有一个错误陷阱,如下所示:

trap failed ERR
function failed {
    local r=$?
    set +o errtrace
    set +o xtrace
    echo "###############################################"
    echo "ERROR: Failed to execute"
    echo "###############################################"
    # invokes cleanup
    cleanup
    exit $r
}

我的代码中有一部分确实会出现错误:
command1
command2
command3
set +e #deactivates error capture
command4_which_expects_error
set -e #re-activates error capture
command5

总的来说,我需要在执行命令期间忽略陷阱4_which_expects_error

设置+ e 似乎没有禁用陷阱。还有其他方法可以“取消陷阱”然后“重新陷阱”吗?

最佳答案

您可以在陷阱手册中找到以下内容:



这意味着它不是由set -e触发的,而是在相同条件下执行的。在ERR上的陷阱中添加set -e将使您的脚本在执行陷阱后退出。

要删除陷阱,请使用:

trap - [signal]

关于bash - 陷阱命令后如何解除陷阱,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31201572/

10-11 16:49