[英]How to have bash shell not execute rest of semicolon list of commands?
假設您在命令提示符下以bash進行以下操作:
cmd1;cmd2;cmd3
如果cmd1
失敗,怎么辦bash不執行cmd2
。
cmd1 && cmd2 && cmd3
說明
執行cmd1
。 如果失敗,則不會執行cmd2
和cmd3
。
為什么? 因為在邏輯上與其他任何邏輯與相乘的false始終等於false ,所以如果cmd1
返回false ,則無需評估cmd2
和cmd3
。 並且通過類似的推理,如果cmd1
成功而cmd2
失敗,則不要執行cmd3
。
注意
為了使事情變得更加混亂,POSIX系統(例如Linux和其他UNIX變體)對於成功返回0,對於失敗返回非零。
所以,當我在上面說失敗時
假 = 非零 = 失敗
真 = 零 = 成功
為什么? 因為使用返回碼的數值表示不同的故障碼。
例如,
$ ls /root
ls: cannot open directory /root: Permission denied
$ echo $?
2
$ asdf
asdf: command not found...
$ echo $?
127
$ ls /
bin boot data dev etc home lib ...
$ echo $?
0
ls
對於較小的問題返回“ 1”,對於較嚴重的問題返回“ 2”。 bash shell返回“ 127”以指示“找不到命令”,而ls /
返回“ 0”以指示成功 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.