代码之家  ›  专栏  ›  技术社区  ›  Alex Parker

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

  •  2
  • Alex Parker  · 技术社区  · 7 年前

    我正在bash shell中运行单元测试,完成这些测试可能需要一些时间,这些测试会在运行时打印输出。我想打印这个输出,我还想把输出存储在一个变量中。但是,如果可能的话,我希望同时完成这些事情,比如 tee 命令在写入文件时执行。可能 球座 在这种情况下也有效

    所以我现在正在做这件事:

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

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

    2 回复  |  直到 7 年前
        1
  •  8
  •   jbch    7 年前
    output=$(ginkgo -r -cover | tee /dev/fd/2)
    

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

        2
  •  2
  •   AlexP    7 年前

    如果您的shell是Bash:

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

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

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

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