实时打印输出并同时将其保存到变量

时间:2018-11-04 18:14:52

标签: bash platform-agnostic

我知道我可以save the output to a variable然后然后打印它:

VAR=$(command)
echo "$VAR"

但这有很多缺点:

  • 我看不到命令​​的进度。
    • 尤其是,将在所有stdout输出之后看到所有stderr的输出,这使得它们很难匹配。
  • 由于这将导致命令工作期间无输出,因此在某些环境(例如Travis CI)中,如果命令工作了足够长的时间,它将终止作业。

那么,如何保存输出并在控制台上实时查看呢?

  • 便携式解决方案是可取的,尽管只有Linux / MacOS可以做到。
  • errexit模式下,解决方案不应有不良副作用

2 个答案:

答案 0 :(得分:0)

从我的头顶上,可以tee将输出输出到设置为原始stdout的其他文件描述符:

exec 3>&1
VAR=$(command | tee /dev/fd/3)

需要将set -o pipefail设置为在command模式下检测errexit的错误。

答案 1 :(得分:0)

这也行

VAR=$(command | tee /dev/tty)