1

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

cmd1;cmd2;cmd3

如果cmd1失败,你如何让 bash 不做cmd2

4

1 回答 1

8
cmd1 && cmd2 && cmd3

解释

执行cmd1。如果失败,cmd2cmd3不会被执行。

为什么?因为false与其他任何东西逻辑与总是等于false,所以如果cmd1返回false则不需要评估cmd2and 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”表示“command not found”,ls /返回“0”表示成功

于 2013-07-17T13:08:05.130 回答