【问题标题】:Bash fail if any single command fails but still run all commands [duplicate]如果任何单个命令失败但仍运行所有命令,则 Bash 失败 [重复]
【发布时间】:2016-01-22 16:39:53
【问题描述】:

可能是一个简单的问题,但没有想到一个优雅的解决方案。我想运行一系列命令(每个命令都是一个测试),如果其中任何一个返回非零,则返回 1。通常我会这样做:

thingA && thingB && thingC
exit $?

但是,如果 thingB 失败并且我想确保所有 3 个都运行,那将不会运行 thingC。我很容易想到一个不优雅的方法:

final_result=0
retval=thingA
if [[ $retval != 0 ]] then
  final_result=1
fi
retval=thingB
...
exit $final_result

有没有一些简单、优雅的方式来获得我想要的东西?

【问题讨论】:

    标签: bash


    【解决方案1】:

    这样够优雅吗?

    status=0
    thingA || status=1
    thingB || status=1
    thingC || status=1
    exit $status
    

    如果您愿意,可以使用 $? 代替 1。或者,您可以在执行分配时使用状态 1、2、3 来识别最后一个失败的命令。如果你想知道第一个失败的命令,你必须在分配给它之前测试$status

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2013-05-14
      相关资源
      最近更新 更多