今天我正在学习排序命令。
我发现我可以使用
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形管道,它可以将缓冲区写入文件,并将缓冲区作为输出传递到下一个管道,这里我们只需要使用它的一半功率。