【问题标题】:Run a command right before a script exits due to failure在脚本因失败而退出之前运行命令
【发布时间】:2021-10-23 07:23:53
【问题描述】:

假设有这个脚本

#!/bin/zsh
python -c 'a'

由于未定义a,它将失败。就在 shell 脚本退出之前,我想运行一个命令,比如echo bye。如何实现?

流程是:

  • 上述 Python 命令失败。
  • bye 出现在终端中。
  • zsh 脚本退出。

我希望它尽可能少地影响 python 命令,例如缩进,将其放入 if 块中,检查其退出代码等。在现实生活中,该命令实际上是多个命令。

【问题讨论】:

  • 我不熟悉zsh,但bash 有一个trap 命令可能是相关的。也许zsh 有类似的东西?
  • trap 'echo bye' 0
  • 感谢@WilliamPursell,用我用过的东西添加了答案

标签: shell unix zsh exit exit-code


【解决方案1】:

在您发布的脚本中,shell 退出的事实与任何错误无关。 shell 将退出,因为最后一个参数尚未执行。以脚本为例

#!/bin/zsh
python -c 'a'
echo This is the End

最终的回显将始终被执行,独立于python 命令。为了使脚本退出,当 python 返回非零退出代码时,您可以编写类似

#!/bin/zsh
python -c 'a' || exit $?
echo Successful

如果要退出脚本,只要第一个命令产生非零退出状态,AND同时要打印一条消息,你可以使用TRAPZERR回调:

#!/bin/zsh
TRAPZERR() {
  echo You have an unhandled non-zero exit code in your otherwise fabulous script
  exit $?
}
python -c 'a'
echo Only Exit Code 0 encountered

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 2021-12-29
    • 2020-05-13
    • 2019-06-08
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2017-01-18
    相关资源
    最近更新 更多