Bash:期望使用设置-e

时间:2019-06-02 18:45:04

标签: bash exit-code

考虑一个启用了set -e(错误退出)的bash脚本。

脚本中的命令之一返回预期的非零退出代码。仅在命令完全返回此退出代码时,才如何恢复脚本?请注意,退出代码零也应计为错误。一线解决方案是最好的。

示例:

set -e

./mycommand  # only continue when exit code of mycommand is '3', otherwise terminate script

...

2 个答案:

答案 0 :(得分:3)

这将由两部分组成:检测错误代码3,然后将零变成另一个错误

一个可能的解决方案就是这样

mycommand && false || [ $? -eq 3 ]

第一个&&运算符将零退出代码转换为1(使用false-如果将1视为“良好”,则更改为其他值),然后使用测试将“良好”退出代码”添加到3。

一种更简单,更易于维护的方法是使用子外壳:

( mycommand; [ $? -eq 3 ] )

此子Shell将正常运行mycommand,其退出代码将是后一个子命令的退出代码。只需确保您不会shopt -s inherit_errexit破坏它:)

答案 1 :(得分:1)

不使用Charles Duffy在评论中指出的set -e是有问题的:

# don't use set -e

./mycommand
if (( $? != 3 ))
then
    exit
fi

# more script contents follow

您可以将其缩短为:

# don't use set -e

./mycommand
(( $? != 3 )) && exit

# more script contents follow