我得到了以下信息:
$ time $(tee < infile > outfile)
real 0m14.721s
user 0m0.094s
sys 0m2.629s
$ time $(cat infile | tee > outfile)
real 0m8.931s
user 0m0.123s
sys 0m3.168
这种差异仅仅是由于重定向/管道造成的,还是还有其他原因?
第二次运行它们给出以下结果:
$ time $(tee < infile > outfile)
real 0m11.558
user 0m0.113s
sys 0m2.691s
$ time $(cat infile | tee > outfile)
real 0m8.822s
user 0m0.120s
sys 0m3.125s
PSinfile
和outfile
都是 MP4 文件,缓存在 RAM 中;如果这有什么区别的话。
答案1
(被事件克服):
这些例子与标题中的不一样。
对于标题中的问题。
的版本cat
会稍微慢一些。
[编者注:此答案的其余部分基于问题的早期版本,其中包含拼写错误。该问题已被编辑,因此以下内容不再相关。]
对于正文中的问题
第一个命令是写入两个文件。这就是为什么速度较慢的原因。第二个是启动一个额外的进程 ( cat
),但是与写入额外的文件相比,这是一个小的减慢速度。
第二次运行可能更快,因为读取已被缓存。
解释
tee < infile tee > outfile
功能上等效,但比 更快cat infile | tee tee > outfile
,而tee > outfile
不是。前两个生成两个文件,第三个生成一个文件,因此速度会更快。