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

时间:2013-07-17 13:06:44

标签: linux bash shell

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

cmd1;cmd2;cmd3

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

1 个答案:

答案 0 :(得分:8)

cmd1 && cmd2 && cmd3

<强>解释

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

为什么呢?因为 false 与其他任何内容进行逻辑AND运算总是等于 false ,所以如果cmd1返回 false ,则无需评估{ {1}}和cmd2。通过类似的推理,如果cmd3成功且cmd1失败,请不要执行cmd2

注意

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

所以,当我说上面失败

  • false = 非零 = 失败

  • true = = 成功

为什么呢?因为使用返回码的数值表示不同的失败码。

例如,

cmd3

$ 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 对于小问题返回“1”,对于更严重的问题返回“2”。 bash shell返回“127”表示“找不到命令”,ls返回“0”表示成功