Io-Redirection

為什麼這個命令會創建一個非常大的文件?

  • August 14, 2016

我今天正在嘗試一些附加操作,出於好奇,我執行了這個(其中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

對貓的一種不錯的不那麼無用的使用…

引用自:https://unix.stackexchange.com/questions/90144