我正在运行单元测试,这可能需要一些时间才能完成,在bash shell中,这些测试在运行时打印输出。我希望打印此输出,并且我还希望将输出存储在变量中。但是,如果可能的话,我希望这些内容同时完成,就像tee
命令在写入文件时所做的那样。也许tee
也适用于这种情况......
所以我现在正在这样做:
output=$(ginkgo -r -cover)
echo "$output"
然而,在所有测试运行之前,这显然不会打印单元测试输出。那么如何在测试运行的同时将输出打印出来,同时将输出存储在变量中?
答案 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)"