特にcat x y > y
とcat x >> x
の場合、xとyはファイルです。
「入力ファイルが出力ファイルです」というエラーが表示されなかった場合はどうなりますか?基本的に、なぜこれらのコマンドを実行できないのですか?
cat x y > y
はcp x y
と同じです(y
はcat
が開始するまでに切り捨てられるため)cat y >> y
が続きます。
cat x >> x
は、ディスクがいっぱいになるか、ファイルシステムのファイルサイズの制限に達するまで無限ループになります(ファイルの最後に追加し続け、再度読み込んで再度追加するため)。
この「エラー」は、cat
が何もしなかったことを意味するわけではないことに注意してください。これは、この特定のファイルがスキップされたことを通知するだけです( in GNU cat
、少なくとも )あなたはそれを実行することを「許可」されています、おそらくあなたが望んでいたことを実行しなかっただけで、それはあなたに知らせています。
そのメッセージを生成するためのGNU cat
のテストは次のとおりです。
st_dev
フィールド)とiノード(st_ino
フィールド)は、出力fdと検査中の入力ファイルの両方で同じです。そしてこれらすべてが当てはまる場合、診断が出力され、次の入力ファイルに進みます。
cat
コマンドの一部のバージョンはこのチェックを行わず、これらのことを実行できます。私は彼らがチェックを行うシステムを想像できます、そしてそれは彼らが同じファイルであることを同様にあなたに言うことができませんが、私はあなたの手でそれをあなたに言うことができませんでした。どちらの場合でも、それはおそらくひどく終わります。 cat
実装がメモリマップファイル全体の単一の書き込みのみを行う場合、ループではなく、ファイルが2倍になるだけで終了する可能性がありますが、それはそれほどひどいものではありません。