当我尝试对文件进行排序并将其输出保存在自身中时,就像这样
sort file1 > file1;
file1的内容将被完全删除,而当我尝试使用“ tee”命令执行同样的操作时
sort file1 | tee file1;
它运行良好 [ed:仅对具有幸运时机的小文件“运行良好”,会在大文件上或在无用的进程调度中导致数据丢失] ,即它会覆盖file1本身的排序输出并在标准输出中显示。
有人可以解释为什么第一种情况不起作用吗?
它不起作用,因为’>’重定向意味着截断,并且为了避免sort在重定向到文件之前将整个输出保留在内存中,bash会在运行之前截断并重定向输出sort。因此,file1文件的内容将在被sort读取之前被截断。
sort
file1