如果命令失败,如何退出?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (48)

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

my_command && (echo 'my_command failed; exit)

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

提问于
用户回答回答于

尝试:

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

四个变化:

  • 更改&&||
  • 用于{ }代替( )
  • 介绍;exit
  • {之前和之后的空间}

既然你想打印这条消息,并且只有当命令失败时退出(以非零值退出),你需要一个||不是一个&&

cmd1 && cmd2

成功cmd2时会运行cmd1(退出值0)。在哪里

cmd1 || cmd2

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

使用( )使得它们内部的命令运行在一个子shell中,并exit从那里调用一个会导致你退出子shell而不是你的原始shell,因此执行在你的原始shell中继续执行。

克服这种用途 { }

用户回答回答于

你也可能有兴趣使用set -e。因此,任何失败的命令(除了特定上下文之外的if测试)都会导致脚本中止。对于某些脚本,它非常有用。

扫码关注云+社区