- ベストアンサー
同じ名前のファイルにリダイレクト
あるファイルを処理し、そのファイルにそのままリダイレクトして書き出そうとした場合の処理に関してです。 例) sed 's/aaa/bbb/' hoge.txt > hoge.txt このようにするとhoge.txtの中身が消えてしまいます。 別名のファイルに書き出してmvすればよいのですが、なぜできないのか納得ができず悩んでいます。 お分かりの方いらっしゃればお教えください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No1 の方が書いているとおり、Linuxに限らず、UNIX系OSで(少なくともcsh系では)リダイレクトによって出力をファイルに落とそうとすると、出力先のファイルがまず作られてからコマンドが実行されます。 このとき、既存のファイルと同じ名前のファイルを出力先に指定すると、強制的に空ファイルによって上書きされます。 (なんでそういう設計になっているかは知りません) ちなみにMS-DOS(試してないけどたぶんWin2k以上のコマンドプロンプトも)では、リダイレクトの際はまずテンポラリファイルに出力されてからリダイレクト先のファイルにコピーされるため、質問文のような記述をしても問題なく実行結果が出力されます。
補足
詳しい説明ありがとうございました。