代码之家  ›  专栏  ›  技术社区  ›  Peter Ajtai

使用cygwin中的“sort x.txt>x.txt”替换文件

  •  0
  • Peter Ajtai  · 技术社区  · 15 年前

    为什么“sort x.txt>x.txt”会清除文件的内容,“sort x.txt>y.txt”会按预期将已排序的文件写入y.txt

    5 回复  |  直到 15 年前
        1
  •  1
  •   mob    15 年前

    外壳截断 x.txt 在它调用命令之前 sort x.txt ,所以当sort命令运行时,没有要排序的内容。

    几乎所有的shell都是这样(包括windows命令窗口);这不仅仅是cygwin的一个特性。

        2
  •  1
  •   James    15 年前

    当您运行该命令时,实际上是在告诉shell打开x.txt进行写操作(>>将是追加的,这是不同的),然后将“sort x.txt”的结果转储到该命令中-发生这种情况的原因是,由于它正在打开文件进行写操作,首先,它有效地启动一个名为x.txt的新文件,然后执行sort x.txt,wh我整理一个空文件。

    我对时间安排为何如此不确定,但我相信它可能会阻止你尝试运行一个命令来写入一个你没有权限写入的文件,等等(也就是说,它先打开它进行写入,以确保它可以写入)。

        3
  •  0
  •   Yin Zhu    15 年前

    sort a > b 打开A和B,A一起阅读,B一起写作。如果是B写的话,就可以了。

        4
  •  0
  •   sth Alien    15 年前

    执行命令时,首先,shell打开输出文件,将程序输出写入,有效地将其截断为零长度。然后它启动排序命令,并在 sort x.txt > x.txt case对新空文件进行排序 x.txt .

        5
  •  0
  •   codaddict    15 年前

    当shell看到命令时 sort x.txt > x.txt 它看到sort命令的输出需要进入文件 x.txt ,所以它打开文件 X.TXT 对于写入,如果文件中已经包含任何内容,则这将清除文件的内容。

    如果要避免这种情况,可以将排序输出重定向到临时文件,然后将临时文件重命名为x.txt。