如何在短路表达式中检索命令的返回码
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 || command5
和status of command3
,使问题一目了然。
【参考方案1】:
详细阐述 devnull 的方法导致
c3=0; command3 || c3=$? && false; && command4 || command5
echo $c3
。
因为每个command
都可以替换为
c=0; command || c=$? && false;
(前提是c
在有条件地执行时最初是未设置的),这很容易扩展。
【讨论】:
以上是关于如何在短路表达式中检索命令的返回码的主要内容,如果未能解决你的问题,请参考以下文章