我有一个 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
失败并出现错误,我希望我的包装脚本也能因此而失败。但是,由于我将所有输出都传输到tee,所以我无法访问mvn clean install
的返回代码,因此当我之后访问$?
时,它始终为0(因为tee成功了)。我尝试让该命令将错误输出写入一个单独的文件,并在之后进行检查,但是mvn的错误输出总是为空(似乎它只写入到stdout)。
如何保留
mvn clean install
的返回代码,同时仍将输出传输到日志文件?
$ set +o pipefail
。 - eddie(set -o pipefail && false | tee log.txt)
将其在子shell中执行,以便恢复pipefail标志的原始状态。 - Jiri Kremser