【问题标题】:Capturing exit status of a failed command in a shell script在 shell 脚本中捕获失败命令的退出状态
【发布时间】:2017-03-08 16:05:18
【问题描述】:

我有一个包含多个命令的 shell 脚本,如下所示

cmd-1
cmd-2
cmd-3
....
cmd-n

我希望 shell 脚本继续执行,即使中间出现故障,例如 cmd-3 或 cmd-7。为此,我使用了 set +e。这允许我继续执行,但我无法捕获失败命令的退出状态(因为脚本的退出状态始终基于最后一个命令)。有没有办法根据最后失败的命令设置完整脚本的状态。

【问题讨论】:

  • 感谢 Joe & aliasav 提供上述链接。但是 set -e 和 '&&' 无法解决问题,因为它们会在发生错误时终止脚本。即使在失败的情况下,我也想继续到最后一个命令,但我想将完整脚本的退出状态设置为基于最后一个失败的命令的退出状态。类似于通过管道传输命令时设置 -o pipefail。在我的情况下,命令没有通过管道传输。
  • 我不确定我是否明白表明未知进程失败的意义,尤其是当它没有严重到足以阻止剩余命令运行时。

标签: bash shell


【解决方案1】:

你可以这样实现。不太干净的方式,但很容易。

exit_code=0
cmd-1 || exit_code=$?
cmd-2 || exit_code=$?
cmd-3 || exit_code=$?
....
cmd-n || exit_code=$?
exit $exit_code

干净的方法是将代码拆分为函数并在那里检查命令的结果。

【讨论】:

    猜你喜欢
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多