我运行该命令time echo "Hello world" | tee output.txt
,希望将完整输出到终端stdout
和output.txt
文件。但是,文件内容不是我期望的:
预期文件内容:
你好世界
实际 0m0.000s
用户 0m0.000s
系统 0m0.000s
实际内容:
你好世界”
有人可以帮忙吗?
答案1
在 Bash 中,time
是一个关键字这适用于整个管道。因此,time echo "Hello world" | tee output.txt
计时的是整个过程echo "Hello world" | tee output.txt
,而不仅仅是命令echo
。此外,它将时间统计信息写入 stderr。因此我们需要:
- 对命令进行分组,以便
time
适用于我们所关注的命令或管道部分。 - 将该组的 stderr 流重定向到 stdout。
- 然后将输出通过管道传输到 tee。
因此,以下之一:
(time echo "Hello world") 2>&1 | tee output.txt
{ time echo "Hello world"; } 2>&1 | tee output.txt
这里:
- 我们需要将(时间回显)作为单个命令,因此使用括号或大括号,
- 将 stderr 重定向到 stdout,
- 通过管道将标准输出传输到
tee
。
我们还可以使用|&
以下快捷方式2>&1 |
:
(time echo "Hello world") |& tee output.txt