1

我知道我可以输出保存到一个变量然后打印它:

VAR=$(command)
echo "$VAR"

但这有很多缺点:

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

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

  • 便携式解决方案是可取的,尽管只有 Linux/MacOS 的解决方案可以在紧要关头做。
  • errexit解决方案不应在模式中产生不良副作用
4

2 回答 2

1

从我的脑海中,可以tee将输出到设置为原始标准输出的附加文件描述符:

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

需要set -o pipefail设置来检测模式command中的错误errexit

于 2018-11-04T18:14:51.740 回答
0

这也将起作用

VAR=$(command | tee /dev/tty)
于 2021-02-05T21:38:47.947 回答