我想编写一个包含多个命令的脚本,并获得所有命令的组合结果:
#!/bin/bash
command1; RET_CMD1=$(echo $?)
command2; RET_CMD2=$(echo $?)
command3; RET_CMD3=$(echo $?)
#result is error if any of them fails
#could I do something like:
RET=RET_CMD1 && RET_CMD2 && RET_CMD3 *<- this is the part that I can't remember how I did in the past..*
echo $RET
感谢您的帮助!
我想你只是在寻找这个:
if ! { command1 && command2 && command3; }; then
echo "one of the commands failed"
fi
仅当所有命令都成功退出时,块{ command1 && command2 && command3; }
的结果才会0
(成功(。如果块全部写在一行上,则需要分号。
无需将返回代码保存到变量中,甚至无需引用$?
,因为if
基于命令(或命令列表(的返回代码工作。
所以想想这个...
我们希望在成功后返回0
...或某个其他正整数(如果其中一个命令发生错误(。
如果任何 3 个都没有发生错误,它们都将返回0
,这意味着您还将在脚本中返回0
。一些简单的添加可以解决此问题。
RET=$[RET_CMD1 + RET_CMD2 + RET_CMD3] # !
echo $RET
如前所述,您还可以将第一行 (!
( 替换为逻辑or
运算符。
RET=$[RET_CMD1 | RET_CMD2 | RET_CMD3]
请注意,加法和逻辑or
本质上是不同的。但是您似乎想要合乎逻辑or
...
此设置的缺点:无法从返回值跟踪错误发生的位置。从任一 3 个命令跟踪错误将需要依赖于生成的其他错误输出。(这只是一个预警。