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

问题描述:

我想排序一个叫f文件可以存储文件进行排序的答案回F:为什么排序f> f会删除所有内容?然后

sort f >f 

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

sort f >1 
mv 1 f 

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

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

sort -o f f 

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

至于sort POSIX规范说:

-o 输出
指定的输出文件的名称来代替标准输出。该文件可以与输入文件 中的一个相同。

由于外壳具有运行sort

之前设置的重定向(通过调用 dup2,并创建一个新的文件)

你可以定义一些功能

autosort() { 
    mv $1 "$1.tmp$$" 
    sort "$1.tmp$$" > $1 
} 

然后用autosort f

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