运行多个bash命令,如果其中一个bash失败,则返回false

时间:2016-04-01 14:59:15

标签: bash rspec

我正在设置一个脚本,它将执行一系列bundle exec rspec命令,如果其中任何一个失败,我希望它返回false。但我仍然希望它能够运行所有测试。如果没有一堆if或test语句,是否有更短的方法来实现这一目标?

3 个答案:

答案 0 :(得分:0)

我目前正在这样做,但是如果我能够编写一个bash函数来处理这个问题,我将使用更好的语法来更新答案:

#!/bin/sh
set +x

RETVAL=0

command1 || RETVAL=1
command2 || RETVAL=1
command3 || RETVAL=1

exit $RETVAL

答案 1 :(得分:-1)

跟踪变量中的退出代码,然后退出。我添加了行号以便排除故障。

declare -i r_code=0    # return code
command1 || { r_code+=$?; echo "ERROR at $LINENO
}

command2 || { r_code+=$?; echo "ERROR at $LINENO
}

exit $r_code

答案 2 :(得分:-1)

这是一个for循环,它将遍历所有返回代码,如果一个失败,将退出第一个看到失败的返回代码。

i=0
rc=0
command1 
rcode[i]=$?
i=i+1
command2
rcode[i]=$? ... n
for i in "${rcode}"
do
   if [ $i -ne 0 ]; then
      rc=$i
      break
   fi
done
exit $rc