运行 脚本因失败而退出之前的命令
Run a command right before a script exits due to failure
假设有这个脚本
#!/bin/zsh
python -c 'a'
这将失败,因为 a
未定义。在 shell 脚本退出之前,我想 运行 一个命令,比如 echo bye
。如何实现?
流量为:
- Python 以上命令失败。
bye
出现在终端中。
- zsh 脚本退出。
我希望它尽可能少地影响 python 命令,例如缩进、将其放入 if 块、检查其退出代码等。在现实生活中,该命令实际上是多个命令。
在您发布的脚本中,shell 退出的事实与任何错误无关。 shell 将退出,因为最后一个参数已被执行。以脚本为例
#!/bin/zsh
python -c 'a'
echo This is the End
最后的 echo 总是被执行,独立于 python
命令。要使脚本退出,当 python returns 非零退出代码时,您可以编写类似
#!/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
假设有这个脚本
#!/bin/zsh
python -c 'a'
这将失败,因为 a
未定义。在 shell 脚本退出之前,我想 运行 一个命令,比如 echo bye
。如何实现?
流量为:
- Python 以上命令失败。
bye
出现在终端中。- zsh 脚本退出。
我希望它尽可能少地影响 python 命令,例如缩进、将其放入 if 块、检查其退出代码等。在现实生活中,该命令实际上是多个命令。
在您发布的脚本中,shell 退出的事实与任何错误无关。 shell 将退出,因为最后一个参数已被执行。以脚本为例
#!/bin/zsh
python -c 'a'
echo This is the End
最后的 echo 总是被执行,独立于 python
命令。要使脚本退出,当 python returns 非零退出代码时,您可以编写类似
#!/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