我想对一个名为f
can 然后将文件排序的答案存储回 f 的文件进行排序:
sort f >f
但是这个命令以一个空文件结束f
,为什么?以及如何使用一个命令来实现我的目标,而不是这样做:
sort f >1
mv 1 f
shell在调用命令之前sort
创建输出文件。(它必须这样做;否则它将无法重定向sort
命令标准输出。)因此,当sort
命令开始f
作为参数运行时,f
它是一个空文件。
您可以使用以下-o
选项来避免这种情况:
sort -o f f
这会导致sort
程序本身f
在开始读取输入文件之前创建输出文件f
。由于文件创建在类 Unix 系统上的工作方式,输入f
和输出f
实际上是两个不同的文件。
正如 POSIX 规范sort
所说:
-o output
指定要使用的输出文件的名称,而不是标准输出。该文件可以与输入文件之一相同。
因为>
通过截断它来创建一个新文件。它首先由 shell 在sort f
命令运行之前完成。
因为 shell 必须在运行之前设置重定向(通过调用dup2
和创建新文件)sort
你可以定义一些功能
autosort() {
mv $1 "$1.tmp$$"
sort "$1.tmp$$" > $1
}
然后使用autosort f