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