編集部からのお知らせ
Topic 本人認証の重要性
宇宙ビジネスの記事まとめダウンロード

同じ名前のファイルにリダイレクト

OKWave

2007-09-18 13:00

同じ名前のファイルにリダイレクト

あるファイルを処理し、そのファイルにそのままリダイレクトして書き出そうとした場合の処理に関してです。

例)

sed 's/aaa/bbb/' hoge.txt > hoge.txt

このようにするとhoge.txtの中身が消えてしまいます。 別名のファイルに書き出してmvすればよいのですが、なぜできないのか納得ができず悩んでいます。 お分かりの方いらっしゃればお教えください。

良回答

Linuxに限らず、UNIX系OSで(少なくともcsh系では)リダイレクトによって出力をファイルに落とそうとすると、出力先のファイルがまず作られてからコマンドが実行されます。

このとき、既存のファイルと同じ名前のファイルを出力先に指定すると、強制的に空ファイルによって上書きされます。 (なんでそういう設計になっているかは知りません)

ちなみにMS-DOS(試してないけどたぶんWin2k以上のコマンドプロンプトも)では、リダイレクトの際はまずテンポラリファイルに出力されてからリダイレクト先のファイルにコピーされるため、質問文のような記述をしても問題なく実行結果が出力されます。

回答

シェルの仕様です。既存のファイルをリダイレクト先に選ぶと、 ファイルサイズを0にします。その後、sedが実行されます。

なぜ、こんな仕様になっているのかは分かりませんが、この仕様のが 分かりやすいのは確かかと、、

ZDNet Japan 記事を毎朝メールでまとめ読み(登録無料)

特集

CIO

モバイル

セキュリティ

スペシャル

ホワイトペーパー

新着

ランキング

  1. ビジネスアプリケーション

    なぜ、2021年にすべてのマーケターが「行動経済学」を学ばねばならないのか?

  2. セキュリティ

    SIEMとEDRが担うべき正しい役割とは?企業のセキュリティ部門が認識しておくべき適切なツールの条件

  3. クラウドコンピューティング

    デザインシンキングによるAIと課題のマッチング!現場視点による真のデジタル改善実現へ

  4. 経営

    なぜ成長企業の経営者はバックオフィス効率化に取り組むのか?生産性を高めるための重要な仕組み

  5. 仮想化

    Microsoft 365を利用する企業が見逃す広大なホワイトスペースとは?

NEWSLETTERS

エンタープライズ・コンピューティングの最前線を配信

ZDNet Japanは、CIOとITマネージャーを対象に、ビジネス課題の解決とITを活用した新たな価値創造を支援します。
ITビジネス全般については、CNET Japanをご覧ください。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]