首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在trap命令之后解除陷阱

如何在trap命令之后解除陷阱
EN

Stack Overflow用户
提问于 2015-07-03 07:57:50
回答 4查看 24.2K关注 0票数 48

我有一个错误陷阱如下:

代码语言:javascript
复制
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
}

在我的代码中,有一部分是我预期会出现错误的:

代码语言:javascript
复制
command1
command2
command3
set +e #deactivates error capture
command4_which_expects_error
set -e #re-activates error capture
command5

总的来说,在执行command4_which_expects_error时,我需要忽略这个陷阱

集+e似乎没有禁用陷阱。还有其他方法来“解开陷阱”然后“重新陷阱”吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-03 09:13:59

下面是在陷阱手册中可以找到的内容:

KornShell使用一个错误陷阱,每当设置-e会导致退出时,就会触发该陷阱。

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

若要移除陷阱,请使用:

代码语言:javascript
复制
trap - [signal]
票数 67
EN

Stack Overflow用户

发布于 2015-07-03 07:59:04

您可以使用此trap重置先前设置的trap

代码语言:javascript
复制
trap '' ERR
票数 11
EN

Stack Overflow用户

发布于 2018-02-23 22:31:00

若要忽略您知道可能失败(但不一定需要)的命令的失败,可以通过附加|| true使行始终成功。

示例:

代码语言:javascript
复制
#!/bin/bash

set -e

failed() {
    echo "Trapped Failure"
}
trap failed ERR

echo "Beginning experiment"
false || true
echo "Proceeding to Normal Exit"

结果

代码语言:javascript
复制
Beginning experiment
Proceeding to Normal Exit
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31201572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档