为什么“sort x.txt> x.txt”清除文件的内容,而“sort x.txt> y.txt”按照您的预期将排序后的文件写入y.txt
答案 0 :(得分:1)
当你运行命令时,你实际上是在告诉shell打开x.txt进行写入(>>会被追加,这会有所不同),然后转储“sort x.txt”的结果进入它 - 它恰好发生了,因为它打开文件进行写入,首先,它有效地启动一个名为x.txt的新文件,然后执行sort x.txt,它对一个空文件进行排序。
我对时间原因并不是肯定的 - 但我相信它可能会让你无法尝试运行命令来写入你无权写入的文件等。(又名 - 它首先打开它进行写入,以确保它可以。)
答案 1 :(得分:1)
shell在调用命令x.txt
之前截断sort x.txt
,所以当sort命令运行时,没有什么可以排序。
几乎所有shell都以这种方式运行(包括Windows CMD窗口);它不仅仅是Cygwin的一个特色。
答案 2 :(得分:0)
sort a > b
打开a和b连同阅读和b写作。作为写作的b,它将被清除。
答案 3 :(得分:0)
执行命令时,首先打开输出文件以写入输出的程序,有效地将其截断为零长度。然后它启动sort命令,并在sort x.txt > x.txt
情况下对新空文件x.txt
进行排序。
答案 4 :(得分:0)
当shell看到命令sort x.txt > x.txt
时,它看到sort命令的输出需要进入文件x.txt
,因此它打开文件x.txt
进行写入,这将如果文件中已有任何内容,请清除文件的内容。
如果要避免它,可以将排序输出重定向到临时文件,稍后将临时文件重命名为x.txt