在Bash中管道输出和捕获退出状态

我想在Bash中执行一个长时间运行的命令,并且都捕获它的退出状态,并输出tee.

所以我这样做:

command | tee out.txt
ST=$?

问题是变量ST捕获了tee的退出状态而不是命令.我怎么解决这个问题?

请注意,命令长时间运行并将输出重定向到文件以便以后查看它对我来说不是一个好的解决方案.

最佳答案
有一个名为$PIPESTATUS的内部Bash变量;它是一个数组,用于保存最后一个前台命令管道中每个命令的退出状态.

<command> | tee out.txt ; test ${PIPESTATUS[0]} -eq 0

或者另一个也适用于其他shell(如zsh)的替代方法是启用pipefail:

set -o pipefail
...

由于语法略有不同,第一个选项不适用于zsh.

转载注明原文:在Bash中管道输出和捕获退出状态 - 代码日志