如何让bash shell不执行其余的分号命令列表?

ste*_*km3 1 linux bash shell

假设您在命令提示符下执行以下操作:

cmd1;cmd2;cmd3
Run Code Online (Sandbox Code Playgroud)

如果cmd1失败你怎么得到bash不要做cmd2.

jsp*_*jsp 8

cmd1 && cmd2 && cmd3
Run Code Online (Sandbox Code Playgroud)

说明

执行cmd1.如果失败,cmd2并且cmd3将不会被执行.

为什么?因为虚假逻辑与其他任何东西的AND总是等于false,所以如果cmd1返回false则不需要评估cmd2cmd3.通过类似的推理,如果cmd1成功并cmd2失败,请不要执行cmd3.

注意

只是为了让事情变得更加混乱,POSIX系统(如Linux和其他UNIX变体)返回0表示成功,非零表示失败.

所以,当我说上面的失败

  • false = 非零 = 失败

  • true = = 成功

为什么?因为使用返回码的数值表示不同的故障码.

例如,

$ 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
Run Code Online (Sandbox Code Playgroud)

ls对于小问题返回"1",对于更严重的问题返回"2".bash shell返回"127"表示"未找到命令",ls /返回"0"表示成功.