我想在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
。