一尘不染

为什么“排序文件1>文件1”不起作用?

linux

当我尝试对文件进行排序并将其输出保存在自身中时,就像这样

sort file1 > file1;

file1的内容将被完全删除,而当我尝试使用“ tee”命令执行同样的操作时

sort file1 | tee file1;

它运行良好 [ed:仅对具有幸运时机的小文件“运行良好”,会在大文件上或在无用的进程调度中导致数据丢失]
,即它会覆盖file1本身的排序输出并在标准输出中显示。

有人可以解释为什么第一种情况不起作用吗?


阅读 262

收藏
2020-06-02

共1个答案

一尘不染

它不起作用,因为’>’重定向意味着截断,并且为了避免sort在重定向到文件之前将整个输出保留在内存中,bash会在运行之前截断并重定向输出sort。因此,file1文件的内容将在被sort读取之前被截断。

2020-06-02