IOリダイレクトとヘッドコマンド

IOリダイレクトとヘッドコマンド

今日私はCygwin bashシェルでファイルをすばやく編集しようとしましたが、.hgignore間違った行を追加しました。これが最善のアプローチであるかどうかはわかりませんが、head -1 .hgignore問題のある行を削除する方法をすばやく考えました(以前はファイルに1行しかありませんでした)。もちろん、実行されると、最初の行は唯一の出力として提供されます。

ただし、出力をリダイレクトしてrewrite fileを使用しようとすると、head -1 .hgignore > .hgignoreファイルは空です。なぜこれが起こるのですか?貼り付けようとするとhead -1 .hgignore >> .hgignore正しく貼り付けられますが、明らかに望ましい結果ではありません。この場合、切り捨てられたリダイレクトが機能しないのはなぜですか?

ベストアンサー1

私の考えでは、ブルースが答えると思います。ここで何が起こっていますか?ハウジング配管付き。

私が好きな小さなユーティリティの1つspongeその他のユーティリティ。ターゲット出力ファイルを開いてデータを書き込む前に、利用可能なすべての入力を「シンク」してこの問題を解決します。これにより、意図したとおりに正確にパイプラインを作成できます。

$ head -1 .hgignore | sponge .hgignore

貧しい人々の解決策は、出力を一時ファイルにパイプし、パイプが完了した後(たとえば、次の実行コマンド)、一時ファイルを元のファイルの場所に戻すことです。

$ head -1 .hgingore > .hgignore.tmp
$ mv .hgignore{.tmp,}

おすすめ記事