command1 && command2 && echo "OK" || echo "FAIL"
OK
如果两个命令都成功或者FAIL
其中一个命令失败,则将打印此信息。
我如何修改它以进行打印:
OK
如果两个命令都成功,FAIL 1
如果command1
失败,并且FAIL 2
如果command2
失败了呢?
答案1
使用花括号来分组命令(不创建子 shell)可以工作:
command1 && { command2 && echo OK || echo FAIL2 } || echo FAIL1
请注意,如果command1
失败,command2
将不会运行,因此您只会得到FAIL1
。
我还认为这种结构不太好读。我发现 using&&
对于简单情况很有效,但对于更复杂的条件,我更喜欢使用if
语句。
答案2
方法有很多,例如:
if ! command1; then
echo 'FAIL 1'
elif ! command2; then
echo 'FAIL 2'
else
echo 'OK'
fi
如果目的只是为了快速调试 Bash 脚本,请考虑使用以下-x
选项:
在执行命令时打印它们及其参数。
答案3
您还可以定义一个变量(a
)并仅在末尾写入失败的命令
a=1 && cmd2 && a=2 && cmd1 && a=0 && echo ok || echo fail $a
您可以在脚本的稍后使用该值...因此,您可以在最后一个命令之后将该值重置为 0。
虽然不优雅,但不知何故它起作用了。:-)