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

Sim*_*n C 4 unix sorting bash pipe cat

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

cat file1.txt | sort > file2.txt
Run Code Online (Sandbox Code Playgroud)

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

cat file1.txt | sort > file1.txt
Run Code Online (Sandbox Code Playgroud)

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

(我正在使用mac 10.8.3的终端.写作日期是19may2013)

Wil*_*ell 6

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

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