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

Posted

技术标签:

【中文标题】使用另一个命令通过管道传输时如何读取命令的返回码[重复]【英文标题】:How to read return code of command when piped with another command [duplicate] 【发布时间】:2021-09-01 05:07:23 【问题描述】:

我有一个 bash 脚本,我在其中执行一个命令和 tee 到一个文件。 检查返回码时,总是0 用于tee <> 命令。

make all | tee output.log
if [[ $? -ne 0 ]]; then
    echo "Make failed"
    exit 1
else
    blah blah
fi

有没有办法检查第一个命令的返回码(在这种情况下是make all)?

【问题讨论】:

【参考方案1】:
if make all | tee output.log
then
  echo Could not write create output.log
  exit 2
elif (( $PIPESTATUS[0] > 0 ))
then
  echo Make failed
  exit 1
else
  echo Looks great
  ...
fi

【讨论】:

【参考方案2】:

假设您有命令管道command1 | command2,您可以通过以下方式获取每个命令退出代码:

echo "$PIPESTATUS[0] - $PIPESTATUS[1]"

【讨论】:

以上是关于使用另一个命令通过管道传输时如何读取命令的返回码[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Powershell:将外部命令输出通过管道传输到另一个外部命令

读取管道后的bash返回码

将 ffmpeg 输出通过管道传输到命名管道

在 LSF 命令中返回管道命令的退出代码

管道输入出错时如何让程序返回

如何跨(计算)节点使用 unix 管道?