小编典典

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

all

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

所以我这样做:

command | tee out.txt
ST=$?

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

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


阅读 124

收藏
2022-03-14

共1个答案

小编典典

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

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

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

set -o pipefail
...

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

2022-03-14