繁体   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