例如,我有.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"
现在我知道这有点过头了,我不需要这一切,但我喜欢这样。这让我觉得审查分支完全干净了。有时看到这条消息会很高兴Already up-to-date.
现在,当分支尚不存在时,git branch -D $1
将会失败并引发错误并且不会运行其余命令。
有没有办法,即使其中一个命令失败,也可以让其余命令运行?
答案1
这就是确保前一个命令成功后再运行下一个命令的全部意义所在&&
。如果你不需要这个,可以使用;
。以下内容将回显foo
:
false; echo foo
以下情况则不会:
false && echo foo
请参阅 Bash 手册,部分命令列表:
用“ ”分隔的命令
;
按顺序执行;shell 等待每个命令依次终止。返回状态是最后执行的命令的退出状态。AND 和 OR 列表是分别由控制运算符“
&&
”和“||
”分隔的一个或多个管道序列。AND 和 OR 列表以左结合性执行。AND 列表的形式为
command1 && command2
command2
command1
当且仅当返回退出状态为零时才执行。OR 列表的形式为
command1 || command2
command2
command1
当且仅当返回非零退出状态时才执行。
答案2
是的,只需替换&&
为;
。
;
无论之前的命令的退出状态如何,之后的命令都会运行;
。
答案3
不要使用,&&
因为这意味着只有前一个命令成功完成后才完成此命令。
而是使用它;
,它相当于一个新行,并且不依赖于前一个命令的退出状态。