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

标签 linux bash shell

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

cmd1;cmd2;cmd3

如果 cmd1 失败,您如何让 bash 不执行 cmd2

最佳答案

cmd1 && cmd2 && cmd3

解释

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

为什么?因为 false 与其他任何东西逻辑与总是等于 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

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

关于linux - 如何让 bash shell 不执行命令的分号列表的其余部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17700620/

相关文章:

linux - 如何使用重定向和管道制作 bash 命令字符串?

c++ - try block 中的禁止地址访问

linux - 创建命令以转到特定快捷方式

linux - 如何使用 Linux split 将一个多 GB 的文件分割成大约 1.5 GB 的 block ?

PowerShell 的 Write-Host 的 Bash 等效项(写入终端但不通过管道传输到标准输出)

linux - 如果不是当前文件,则重命名文件

bash - 生成文件路径

linux - 如何使用代码获取 sas.servers 的状态

c - 文件操作写入不会在新行中发生

linux - 限制Linux中程序的内存使用