Unix:将文件输出到自身 - 为什么这会使文件空白?

时间:2013-05-19 11:33:06

标签: bash unix sorting pipe cat

有人可以向我解释为什么这段代码有效(即file2.txt是按字母顺序排序的file1.txt内容):

cat file1.txt | sort > file2.txt

但是当我这样做时,file1.txt会自行空白......?

cat file1.txt | sort > file1.txt

你可以猜到,我试图按字母顺序对文件的内容进行排序,然后写回同一个文件......

(我正在使用mac 10.8.3的终端。写作日期是2013年10月19日)

1 个答案:

答案 0 :(得分:6)

shell打开sort后输出file1.txt(截断它,即丢弃所有数据)。然后它会以cat开始file1.txt开始阅读。 shell的语义是这样的,管道可以从file.txt获取一个或多个输入的页面,但实际上几乎所有的shell(也就是所有的shell,但也许有一些) shell {我从未使用过不会这样做的方式}会在cat读取任何数据之前截断文件。

要执行此操作,您必须使用临时文件。 (好吧,它不是强制要求使用临时文件。如果文件足够小,这样的东西可能会起作用cat file1.txt | ( sleep 2; sort > file1.txt ),但不能保证。)