对于标题中的问题。

对于标题中的问题。

我得到了以下信息:

$ 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

PSinfileoutfile都是 MP4 文件,缓存在 RAM 中;如果这有什么区别的话。

答案1

(被事件克服): 这些例子与标题中的不一样。

对于标题中的问题。

的版本cat会稍微慢一些。



[编者注:此答案的其余部分基于问题的早期版本,其中包含拼写错误。该问题已被编辑,因此以下内容不再相关。]

对于正文中的问题

第一个命令是写入两个文件。这就是为什么速度较慢的原因。第二个是启动一个额外的进程 ( cat),但是与写入额外的文件相比,这是一个小的减慢速度。

第二次运行可能更快,因为读取已被缓存。

解释

tee < infile tee > outfile功能上等效,但比 更快cat infile | tee tee > outfile,而tee > outfile不是。前两个生成两个文件,第三个生成一个文件,因此速度会更快。

相关内容