我想用几个命令编写一个脚本并获得所有命令的组合结果:
#!/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
感谢您的帮助!
答案 0 :(得分:2)
我认为您只是在寻找这个东西
if ! { command1 && command2 && command3; }; then
echo "one of the commands failed"
fi
仅当所有命令成功退出时,块{ command1 && command2 && command3; }
的结果才是0
(成功)。如果将块全部写在一行上,则需要使用分号。
因为$?
是基于命令(或命令列表)的返回代码工作的,所以无需将返回代码保存到变量中,甚至不必引用if
。
答案 1 :(得分:1)
所以考虑一下...
我们要在成功返回0
…或如果其中一个命令发生错误,则返回其他正整数。
如果任何3个都未发生错误,则它们都将返回0
,这意味着您还将在脚本中返回0
。一些简单的添加即可解决此问题。
RET=$[RET_CMD1 + RET_CMD2 + RET_CMD3] # !
echo $RET
您还可以使用逻辑!
替换第一行(or
),如上所述。
RET=$[RET_CMD1 | RET_CMD2 | RET_CMD3]
请注意,加法和逻辑or
本质上是不同的。但是您似乎想要合乎逻辑的or
...
此设置的缺点:无法从返回值中跟踪发生错误的位置。从这三个命令中跟踪错误将需要依赖于生成的其他错误输出。 (这只是一个警告。)