小编典典

管道命令输出到 tee 但也保存命令的退出代码

all

我有一个 shell 脚本,我在其中包装了一个命令(mvn clean install),以将输出重定向到一个日志文件。

#!/bin/bash
...
mvn clean install $@ | tee $logfile
echo $? # Does not show the return code of mvn clean install

现在,如果mvn clean install因错误而失败,我希望我的包装器 shell 脚本也因该错误而失败。但是由于我将所有输出通过管道传输到
tee,我无法访问 的返回码mvn clean install,所以当我$?之后访问时,它始终为 0(因为 tee 成功)。

我尝试让命令将错误输出写入单独的文件并随后检查,但 mvn 的错误输出始终为空(似乎只写入标准输出)。

如何保留返回代码mvn clean install但仍将输出传输到日志文件?


阅读 66

收藏
2022-06-27

共1个答案

小编典典

由于您正在运行bash,您可以使用它的$PIPESTATUS变量而不是$?

mvn clean install $@ | tee $logfile
echo ${PIPESTATUS[0]}
2022-06-27