[英]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.