Bash:如果 command1 失败,则运行 command2

mic*_*con 72 bash shell-script exit-status

我想做这样的事情:

if cmd1 && cmd2
echo success
else
echo epic fail
fi
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Pet*_*zel 106

这些应该做你需要的:

cmd1 && cmd2 && echo success || echo epic fail
Run Code Online (Sandbox Code Playgroud)

或者

if cmd1 && cmd2; then
    echo success
else
    echo epic fail
fi
Run Code Online (Sandbox Code Playgroud)

  • 这有效,但我很困惑为什么 `||` 不查看第一个 `echo` 命令的输出。 (3认同)

Orl*_*ier 65

问题中的伪代码与问题的标题不对应。

如果有人需要真正知道在命令 1 失败时如何运行命令 2,这是一个简单的解释:

  • cmd1 || cmd2: 这将运行cmd1,如果失败,它将运行cmd2
  • cmd1 && cmd2: 这将运行cmd1,如果成功,它将运行cmd2
  • cmd1 ; cmd2:这将运行cmd1,然后它会运行cmd2,与运行失败或成功无关cmd1


Joh*_*han 28

彼得·乌泽尔 (Petr Uzel) 恰到好处,但您也可以使用神奇的 $?。

$? 保存最后执行的命令的退出代码,如果您使用它,您可以非常灵活地编写脚本。

这个问题有点触及这个话题,使用 $ 的最佳实践?在 bash 中?.

cmd1 
if [ "$?" -eq "0" ]
then
  echo "ok"
else
  echo "Fail"
fi
Run Code Online (Sandbox Code Playgroud)

然后,您还可以对不同的退出代码做出反应,并根据需要做不同的事情。

  • 我的公司 PHP Experts, Inc. 和我本人感谢您成为我们内部 CI 脚本中不可或缺的一部分。谢谢! (5认同)