为什么排序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完成。