在bash中聚合失败代码

时间:2015-06-15 10:53:29

标签: bash

我有一个有多个阶段的脚本,并且在每个阶段都可能失败,但脚本可以继续运行。

具体来说,我生成了一些json,并检查diff是否正确。差异可能是错误的,但它并没有停止生产json的下一阶段。

如何聚合diff的失败代码,以便在返回任何差异时返回1> 1,否则为0,一旦发生故障就不会结束?

基本上,它只是将||折叠到结果代码上,但我似乎找不到一个很好的方法来||一个带有返回码的字符串。

骨架:

main_result=0
for s in stage1 stage2 stage3; do
    diff <(generate-stuff) expected-$stage
    result=$?
    # something like main_result=$main_result || $result
done

exit $main_result

2 个答案:

答案 0 :(得分:2)

逻辑或可以完成:

main_result=$((main_result || result))

答案 1 :(得分:2)

您要找的是$(()),其解释为here

#!/bin/sh
main_result=0
main_result=$((main_result || 0))
echo $main_result
main_result=$((main_result || 1))
main_result=$((main_result || 0))
echo $main_result

结果:

0
1

所以你需要做的就是

main_result=$((main_result || $?))