考虑一个启用了set -e
(错误退出)的bash脚本。
脚本中的命令之一返回预期的非零退出代码。仅在命令完全返回此退出代码时,才如何恢复脚本?请注意,退出代码零也应计为错误。一线解决方案是最好的。
示例:
set -e
./mycommand # only continue when exit code of mycommand is '3', otherwise terminate script
...
答案 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