显示哪个命令失败

显示哪个命令失败

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。

虽然不优雅,但不知何故它起作用了。:-)

相关内容