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

Print command output while storing in variable

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

所以我目前正在这样做:

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

然而,这显然不会打印单元测试输出,直到所有测试都有 运行。那么我怎样才能让输出打印为测试 运行 同时将该输出存储在一个变量中呢?

如果你的 shell 是 Bash:

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

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

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

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

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