今日私は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,}