【问题标题】:how to get the exit status of the first command in a pipe? [duplicate]如何获取管道中第一个命令的退出状态? [复制]
【发布时间】:2014-09-04 06:29:03
【问题描述】:

我做了一个简单的脚本:

$ more test.bash
#!/bin/bash
echo test
exit 1

当我运行脚本时,退出状态应该是 1

$ /tmp/test.bash
echo $?
1

但是当我按以下方式运行时

/tmp/test.bash | tr -d '\r' 1>>$LOG 2>>$LOG
echo $?
0

退出状态为0,(不是预期的1

似乎退出状态来自 tr 命令。 但我想要的是从脚本中获取退出状态 - test.bash。

我需要在我的语法中添加/更改什么以便从脚本而不是从管道之后的命令中获得正确的退出状态?

【问题讨论】:

    标签: linux bash shell exit-code


    【解决方案1】:

    使用PIPESTATUS 数组:

    $ ls foo | cat
    ls: foo: No such file or directory
    $ echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
    2 0
    

    注意:PIPESTATUS 是一个 bashism(即不是 POSIX)。

    【讨论】:

    • 对我来说非常非常好和新! (为你 +1)
    • 很高兴帮助一个人类同胞:-)
    • 投票选出最佳答案
    • 替代方案:您可以通过set -o pipefail进行初始化来检查所有命令是否以0退出
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 2012-06-25
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多