我想在Bash中执行长时间运行的命令,并同时捕获其退出状态和tee其输出。

所以我这样做:

command | tee out.txt
ST=$?

问题在于变量ST捕获tee而不是命令的退出状态。我该如何解决?

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

最佳答案

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

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

或者也可以与其他shell(如zsh)一起使用的另一种替代方法是启用pipefail:
set -o pipefail
...

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

10-04 23:15