存储在变量中时打印命令输出

时间:2017-11-29 19:22:16

标签: bash stdout io-redirection tee

我正在运行单元测试,这可能需要一些时间才能完成,在bash shell中,这些测试在运行时打印输出。我希望打印此输出,并且我还希望将输出存储在变量中。但是,如果可能的话,我希望这些内容同时完成,就像tee命令在写入文件时所做的那样。也许tee也适用于这种情况......

所以我现在正在这样做:

output=$(ginkgo -r -cover)
echo "$output"

然而,在所有测试运行之前,这显然不会打印单元测试输出。那么如何在测试运行的同时将输出打印出来,同时将输出存储在变量中?

2 个答案:

答案 0 :(得分:6)

output=$(ginkgo -r -cover | tee /dev/fd/2)

您可以使用tee将stdout发送到stdout和stderr。 stdout被捕获到你的变量中,打印出stderr。

答案 1 :(得分:2)

如果你的shell是Bash:

ginkgo -r -cover | tee ginkgo.out
output="$(< ginkgo.out)" && rm ginkgo.out

如果您想捕获标准错误流,也可以考虑|&而不是|。如果您想保留输出文件,可能需要省略rm

如果您不喜欢临时文件并且以交互方式运行,

output="(ginkgo -r -cover |& tee /dev/tty)"