![为什么“ 排序文件 > 文件 ”会删除该文件的所有内容?](https://linux22.com/image/1412256/%E4%B8%BA%E4%BB%80%E4%B9%88%E2%80%9C%20%E6%8E%92%E5%BA%8F%E6%96%87%E4%BB%B6%20%3E%20%E6%96%87%E4%BB%B6%20%E2%80%9D%E4%BC%9A%E5%88%A0%E9%99%A4%E8%AF%A5%E6%96%87%E4%BB%B6%E7%9A%84%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9%EF%BC%9F.png)
今天我正在学习排序命令。
我发现我可以使用
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形管道,它可以将缓冲区写入文件,并将缓冲区作为输出传递到下一个管道,这里我们只需要使用它的一半功率。