1

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

sort f >f

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

sort f >1
mv 1 f
4

3 回答 3

10

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

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

sort -o f f

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

正如 POSIX 规范sort所说:

-o output
指定要使用的输出文件的名称,而不是标准输出。该文件可以与输入文件之一相同。

于 2013-05-12T06:48:39.233 回答
5

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

于 2013-05-12T06:48:21.537 回答
2

因为 shell 必须在运行之前设置重定向(通过调用dup2和创建新文件)sort

你可以定义一些功能

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

然后使用autosort f

于 2013-05-12T06:48:13.490 回答