Bash:使用 set -e 期望不同的退出代码

Bash: Expect different exit code with set -e

考虑在启用 set -e 的情况下执行的 bash 脚本(出错时退出)。

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

示例:

set -e

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

...

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

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

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

第一个 && 运算符将零退出代码变为 1(使用 false - 如果应考虑 1 "good",则更改为其他内容),然后使用测试来将 "good exit code" 更改为 3.

更简单的 easier-to-maintain 方法是使用子 shell:

( mycommand; [ $? -eq 3 ] )

该子 shell 将 运行 mycommand 正常,其退出代码将是后者的 sub-command。请确保您不会 shopt -s inherit_errexit 破坏它:)

不使用 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