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)
shell sort打开file1.txt输出后开始(截断它,即丢弃所有数据).然后,它开始cat与file1.txt开放阅读.shell的语义是这样的,管道可以从一个页面左右获取输入file.txt,但实际上几乎所有的shell(也就是所有的shell,但也许有一些shell我从来没有)使用不这样做的方法)将在cat读取任何数据之前截断文件.
要执行此操作,您必须使用临时文件.(嗯,使用临时文件并不是强制性的.如果文件足够小,这样的东西可能会起作用cat file1.txt | ( sleep 2; sort > file1.txt ),但不能保证.)