为什么“ 排序文件 > 文件 ”会删除该文件的所有内容?

为什么“ 排序文件 > 文件 ”会删除该文件的所有内容?

今天我正在学习排序命令。

我发现我可以使用

sort file1 > file2

将排序后的文件注入到file2中

但是当我使用

sort file1 > file1

file1变成空的!

为什么?!

我知道我可以使用 -o 标志将排序文件 1 放入文件 1 中。

但是为什么第二条命令会生成一个空文件?

答案1

sort在运行命令之前,shell 的输出重定向会清除文件的内容。

man bash

在执行命令之前,可以使用 shell 解释的特殊符号重定向其输入和输出。[...]

输出重定向会导致以 word 扩展名命名的文件被打开并写入 [...]。如果文件不存在,则创建该文件;如果文件存在,则将其截断为零大小。

答案2

正如丹尼尔贝克(Daniel Beck)解释为什么会失败。

这是完成 OP 想要的工作的一种方法。

sort file1 | tee file1

tee 是一个T形管道,它可以将缓冲区写入文件,并将缓冲区作为输出传递到下一个管道,这里我们只需要使用它的一半功率。

相关内容