テキスト処理の結果を再び入力ファイルに書き込むこの2つのコマンドがそれほど動作しないのはなぜですか?

テキスト処理の結果を再び入力ファイルに書き込むこの2つのコマンドがそれほど動作しないのはなぜですか?

ファイルがありますが、authorized_keys重複したコンテンツを削除したいと思います。つまり、重複したアイテムを削除したいのです。

これを達成するための2つの可能な解決策を見つけました。

  1. 以下を使用して、cat出力uniqをソースファイルにリダイレクトします。
    cat authorized_keys | uniq > authorized_keys
    
  2. sortオプションで使用-o:
    sort -u ~/.ssh/authorized_keys -o ~/.ssh/authorized_keys
    

ただし、2番目のオプションのみが機能します。最初の方法は空のファイルを生成します。

出力を次のような別のファイルにリダイレクトする場合

cat authorized_keys | uniq > authorized_keys_2

新しいファイルには正しい内容がありますが、

cat authorized_keys | uniq > authorized_keys

私に空白を残してくださいauthorized_keys

これら2つの方法の違いを理解するのに役立ちます。

ベストアンサー1

ファイルを同時に読み書きするため、最初の解決策は機能しません。これにより、リダイレクト(つまり、「>」記号)がシェルで処理され、シェルに最初に書き込むためにファイルを開いて空にするように指示するため、空のファイルが生成されます。その後、コマンドは次のようになります。

cat authorized_keys | uniq

実行されますが、authorized_keysファイルは空であるため、空の出力が発生します。このような問題を回避するには、authorized_keys_2入力の保存に使用したものと同じ一時ファイルを使用し、元のファイルを一時ファイルで上書きできます。

おすすめ記事