如何在短路表达式中检索命令的返回码

Posted

技术标签:

【中文标题】如何在短路表达式中检索命令的返回码【英文标题】:How to retrieve the return code of a command in a short-circuit expression 【发布时间】:2013-07-18 08:43:50 【问题描述】:

在表达式之后:

command1 | command2

我可以通过$PIPESTATUS[0]检索第一个命令的退出状态

表格中的表达式是否有等价物:

command3 && command4 || command5

我想找回command3的退出码:

command3 && command4 || command5
retval=$SHORTCIRCUIT[0]     # how to get this value?

最好不要创建临时文件。

【问题讨论】:

鉴于这里 command4 正在使用 command3 的返回状态,我当然也希望看到这个问题的答案,而不需要像 command3; ST=$?; [[ $ST -eq 0 ]] || command4 这样的解决方法 此外,这些变通办法在使用set -e 时往往会失效。 将您的问题更改为command3 && command4 || command5status of command3,使问题一目了然。 【参考方案1】:

详细阐述 devnull 的方法导致

 c3=0; command3 || c3=$? && false;  && command4 || command5
echo $c3

。 因为每个command都可以替换为

 c=0; command || c=$? && false; 

(前提是c在有条件地执行时最初是未设置的),这很容易扩展。

【讨论】:

以上是关于如何在短路表达式中检索命令的返回码的主要内容,如果未能解决你的问题,请参考以下文章

java如何返回各种状态码

使用另一个命令通过管道传输时如何读取命令的返回码[重复]

如何绕过 python 中 sys.exit() 的 0-255 范围限制?

批处理文件中的“EXIT”不能覆盖先前命令的返回码

如何让 Bamboo 期望任务的不同返回码?

使用 php 返回码 77 执行系统命令