使用 && 运行命令时,如何在一个命令失败时保持运行?

use*_*407 0 command-line bash error-handling

例如,我有.gitconfig一个项目,因为我做了很多代码审查,内容如下:

review = "!f(){ git checkout master && git pull origin master && git branch -D $1 && git fetch && git checkout $1 && git pull origin $1 && bundle install && rake db:migrate && git checkout -f; };f"
Run Code Online (Sandbox Code Playgroud)

现在我知道这有点矫枉过正,我不需要它,但我喜欢那样。这让我觉得审查分支完全干净。有时候看到留言真好Already up-to-date.

现在,当分支尚不存在时,git branch -D $1它将失败并抛出错误并且不运行其余命令。

即使其中一个命令失败,有没有办法让其余命令运行?

mur*_*uru 6

这就是重点&&- 在运行下一个命令之前确保上一个命令成功。如果不需要,请;改用。以下将回显foo

false; echo foo
Run Code Online (Sandbox Code Playgroud)

而以下不会:

false && echo foo
Run Code Online (Sandbox Code Playgroud)

请参阅 Bash 手册,命令列表部分

以“ ;”分隔的命令按顺序执行;shell 依次等待每个命令终止。返回状态是最后执行的命令的退出状态。

AND 和 OR 列表是一个或多个管道的序列,分别由控制运算符“ &&”和“ ||”分隔。AND 和 OR 列表以左结合性执行。

AND 列表具有以下形式

command1 && command2
Run Code Online (Sandbox Code Playgroud)

command2当且仅当command1返回退出状态为零时才执行。

OR 列表具有以下形式

command1 || command2
Run Code Online (Sandbox Code Playgroud)

command2当且仅当command1返回非零退出状态时才执行。