为什么排序f> f会删除所有内容?

Yis*_*ang 1 linux sorting bash

我想排序一个名为fcan 的文件然后将文件排序的答案存储回f:

sort f >f
Run Code Online (Sandbox Code Playgroud)

但是这个命令以空文件结束f,为什么?如何使用一个命令实现我的目标,而不是这样做:

sort f >1
mv 1 f
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 10

shell 调用sort命令之前创建输出文件.(它必须;否则它将无法重定向sort命令stdout.)因此,当sort命令开始f作为参数运行时,f是一个空文件.

您可以使用以下-o选项来避免这种情况:

sort -o f f
Run Code Online (Sandbox Code Playgroud)

这导致sort程序本身f在开始读取输入文件之前创建输出文件f.由于文件创建在类Unix系统上的工作方式,输入f和输出f实际上是两个不同的文件.

正如POSIX规范sort所说:

-o output
指定要使用的输出文件的名称,而不是标准输出.此文件可以与其中一个输入文件相同.


use*_*353 5

因为>通过截断它来创建一个新文件.在sort f命令运行之前,它首先由shell完成.