このコマンドが非常に大きなファイルを生成するのはなぜですか?

このコマンドが非常に大きなファイルを生成するのはなぜですか?

私は今日いくつかの追加作業を試みていましたが、好奇心でこれを実行しました。ファイル1.txt空ではありません。ファイル2.txt空):

$ cat file1.txt >> file2.txt >> file1.txt

時間がかかると思われる場合はCtrl+を押してC終了します。いつ、ファイル1.txtサイズは数百MBです。

ファイル名を切り替えても同じ効果はありません。ファイルがこの順序である場合にのみ、無限リダイレクトが発生します。この状況の原因は正確に何ですか?

ベストアンサー1

この方法では複数の基準が使用できず、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

猫をうまく活用しますが、役に立たないわけではありません…

おすすめ記事