有人可以向我解释为什么这段代码有效(即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日)
答案 0 :(得分:6)
shell打开sort
后输出file1.txt
(截断它,即丢弃所有数据)。然后它会以cat
开始file1.txt
开始阅读。 shell的语义是这样的,管道可以从file.txt
获取一个或多个输入的页面,但实际上几乎所有的shell(也就是所有的shell,但也许有一些) shell {我从未使用过不会这样做的方式}会在cat
读取任何数据之前截断文件。
要执行此操作,您必须使用临时文件。 (好吧,它不是强制要求使用临时文件。如果文件足够小,这样的东西可能会起作用cat file1.txt | ( sleep 2; sort > file1.txt )
,但不能保证。)