如果任何单个命令失败但仍然运行所有命令,则Bash失败

时间:2016-01-22 16:39:53

标签: bash

可能是一个简单的问题,但不会想到一个优雅的解决方案。我想运行一系列命令(每个命令都是一个测试)并返回1,如果它们中的任何一个返回非零。通常我会做类似的事情:

thingA && thingB && thingC
exit $?

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

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

是否有一些简单,优雅的方式来获得我想要的东西?

1 个答案:

答案 0 :(得分:15)

这够优雅吗?

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

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