Io-Redirection
為什麼這個命令會創建一個非常大的文件?
我今天正在嘗試一些附加操作,出於好奇,我執行了這個(其中file1.txt非空,file2.txt為空):
$ cat file1.txt >> file2.txt >> file1.txt
當我看到它需要一段時間時,我點擊
Ctrl
+C
結束它。到那時,file1.txt的大小已達到數百 MB。切換文件名不會產生相同的效果;只有當文件按此順序時,才會發生無限重定向。究竟是怎麼回事?
你不能告訴
cat
以這種方式使用多個標準,最後一個重定向優先,所以:cat file1.txt >> file2.txt >> file1.txt
相當於:
>> file2.txt ; cat file1.txt >> file1.txt
這顯然會很快填滿文件系統,因為作為目標的源文件也會無限增長,只要
file1.txt
它足夠大而不能立即讀取。大多數現代
cat
實現應該檢測遞歸性併中止:索拉里斯貓:
cat: input/output files 'file1.txt' identical
牛羚貓:
cat: file1.txt: input file is output file
無論如何,他們可能會被類似的東西愚弄:
cat < file1.txt | cat | cat >> file2.txt >> file1.txt
對貓的一種不錯的不那麼無用的使用…