Bash:如何捕获set -e,但不退出

时间:2017-01-12 17:47:52

标签: bash exit-code

我的脚本有第一条指令:

set -e

因此,只要发生错误,脚本就会中止。我想捕获这种情况以显示信息消息,但我不想在脚本退出时显示该消息;只有当设置-e触发堕胎时。是否有可能陷入这种情况?

此:

set -e

function mytrap {
    echo "Abnormal termination!"
}

trap mytrap EXIT

error

echo "Normal termination"

在任何退出中调用(无论是否发生错误),这不是我想要的。

1 个答案:

答案 0 :(得分:6)

不要在trap上使用EXIT,而是在ERR事件中使用它:

trap mytrap ERR

完整代码:

set -e

function mytrap {
   echo "Abnormal termination!"
}

trap mytrap ERR

(($#)) && error

echo "Normal termination"

现在运行它以生成错误:

bash sete.sh 123
sete.sh: line 9: error: command not found
Abnormal termination!

这是正常退出:

bash sete.sh
Normal termination