为什么执行`sort file > file`命令会导致文件为空?

4
当你尝试使用“in-place”对文件进行排序时,
sort afile > afile

你最终发现afile为空文件。

为什么会这样?我本来期望要么出错要么返回排序后的原始内容。我没有测试其他shell。

给能够达到期望行为的单行代码点赞。

PS:bash将输入重定向回同一文件根本没有解释“为什么”的问题。我知道可以用临时文件解决它,但我对发生了什么很感兴趣。点赞单行代码部分是事后想到的,是为了寻找更短的方法。


3
你可以使用输出文件选项 sort afile -o afile。这将对文件进行排序并将排序结果保存回原始文件中,不会更改原始文件名或位置。 - domino
我的问题是输出不为空,排序导致空行出现在顶部,使得文件看起来像是空的。 - nurettin
1个回答

12

使用 sort afile > afile 命令会发生以下事情:

  1. 由于文件方向操作符 > afile,shell 打开并截断了 afile 文件。

  2. shell 运行 sort 程序并传递一个参数 afile ,将新进程的标准输出绑定到第一步打开的文件描述符。

  3. sort 程序打开其第一个参数所指示的文件,但由于第一步中的截断操作,该文件为空。

您可以使用 sort afile -o afile 命令来实现同样的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接