如何在文件中获取 time 命令的输出?

Ahm*_*ein 6 bash redirect

我运行了该命令,time echo "Hello world" | tee output.txt希望获得终端stdoutoutput.txt文件的完整输出。但是,文件内容不是我所期望的:

预期文件内容:

你好世界

真实 0m0.000s
用户 0m0.000s
系统 0m0.000s

实际内容:

你好世界”

有人可以帮忙吗?

小智 9

在 bash 中,是一个适用于整个管道的time关键字。因此,time echo "Hello world" | tee output.txt是对整个命令进行计时echo "Hello world" | tee output.txt,而不仅仅是echo命令。此外,它将时间统计信息写入 stderr。所以我们需要:

  1. 对命令进行分组,以便time适用于我们关心的命令或管道部分。
  2. 将该组的 stderr 流重定向到 stdout。
  3. 然后将输出通过管道传输到 tee。

所以,其中之一:

(time echo "Hello world") 2>&1 | tee output.txt
{ time echo "Hello world"; } 2>&1 | tee output.txt
Run Code Online (Sandbox Code Playgroud)

这里:

  • 我们需要将 (time echo) 作为单个命令,因此使用括号或大括号,
  • 将 stderr 重定向到 stdout,
  • 通过管道将标准输出发送到tee.

我们还可以使用|&以下快捷方式2>&1 |

(time echo "Hello world") |& tee output.txt
Run Code Online (Sandbox Code Playgroud)

  • 这些实际上是“括号”而不是大括号,并导致命令在子 shell 中执行。实际上,您可以使用大括号来代替,这样可以避免使用子 shell:`{ time echo "Hello world"; } 2>&1`. 请注意空格和额外的“;”,当编写为单行代码时,这是必需的。 (2认同)