簡體   English   中英

如何讓bash shell不執行其余的分號命令列表?

[英]How to have bash shell not execute rest of semicolon list of commands?

假設您在命令提示符下以bash進行以下操作:

cmd1;cmd2;cmd3

如果cmd1失敗,怎么辦bash不執行cmd2

cmd1 && cmd2 && cmd3

說明

執行cmd1 如果失敗,則不會執行cmd2cmd3

為什么? 因為在邏輯上與其他任何邏輯與相乘的false始終等於false ,所以如果cmd1返回false ,則無需評估cmd2cmd3 並且通過類似的推理,如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM