我有一个错误陷阱如下:
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总的来说,在执行command4_which_expects_error时,我需要忽略这个陷阱
集+e似乎没有禁用陷阱。还有其他方法来“解开陷阱”然后“重新陷阱”吗?
发布于 2015-07-03 09:13:59
下面是在陷阱手册中可以找到的内容:
KornShell使用一个错误陷阱,每当设置-e会导致退出时,就会触发该陷阱。
这意味着它不是由set -e触发的,而是在相同的条件下执行的。在错误上将set -e添加到陷阱将使脚本在执行陷阱后退出。
若要移除陷阱,请使用:
trap - [signal]发布于 2015-07-03 07:59:04
您可以使用此trap重置先前设置的trap:
trap '' ERR发布于 2018-02-23 22:31:00
若要忽略您知道可能失败(但不一定需要)的命令的失败,可以通过附加|| true使行始终成功。
示例:
#!/bin/bash
set -e
failed() {
echo "Trapped Failure"
}
trap failed ERR
echo "Beginning experiment"
false || true
echo "Proceeding to Normal Exit"结果
Beginning experiment
Proceeding to Normal Exithttps://stackoverflow.com/questions/31201572
复制相似问题