如果命令失败如何退出?

新手上路,请多包涵

我是 shell 脚本的菜鸟。如果命令失败,我想打印一条消息并退出我的脚本。我试过了:

 my_command && (echo 'my_command failed; exit)

但它不起作用。它继续执行脚本中此行之后的指令。我正在使用 Ubuntu 和 bash。

原文由 user459246 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 649
2 个回答

尝试:

 my_command || { echo 'my_command failed' ; exit 1; }

四个变化:

  • 将 --- && 更改为 ||
  • 使用 { } 代替 ( )
  • ; exit
  • {} --- 之前的空格

由于您只想在命令失败时打印消息并退出(以非零值退出),因此您需要 || 而不是 &&

 cmd1 && cmd2

将运行 cmd2cmd1 成功(退出值 0 )。然而

cmd1 || cmd2

将运行 cmd2cmd1 失败(退出值非零)。

使用 ( ) 使它们内部的命令在 子 shell 中运行并从那里调用 exit 会导致您退出子 shell 而不是原来的 shell,因此在您的原壳。

为了克服这种使用 { }

bash 需要最后两个更改。

原文由 codaddict 发布,翻译遵循 CC BY-SA 3.0 许可协议

其他答案很好地涵盖了直接问题,但您可能也有兴趣使用 set -e 。这样,任何失败的命令(在 if 测试等特定上下文之外)都会导致脚本中止。对于某些脚本,它非常有用。

原文由 Daenyth 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题