GNU/Linux >> Linux の 問題 >  >> Linux

コマンドShufファイル>ファイルは空のファイルを残しますが、同様のコマンドは残しませんか?

この質問にはすでに回答があります :ファイルをそれ自体に `cat`することでファイルが消去されるのはなぜですか? [重複]

(2つの回答)
2年前に閉鎖されました。

これは別の質問の複製のようなものですが(なぜこの並べ替えコマンドで空のファイルが表示されるのですか?)、与えられた回答に応じて質問を拡張したいと思いました。

コマンド

shuf example.txt > example.txt

シェルがファイルをシャッフルする前に切り捨て、シャッフルする空白のファイルのみを残すため、空白のファイルを返します。ただし、

cat example.txt | shuf > example.txt

期待どおりにシャッフルされたファイルが生成されます。

単純なリダイレクトが機能しないのに、パイプライン方式が機能するのはなぜですか?コマンドを実行する前にファイルが切り捨てられた場合、2番目の方法でも空のファイルを残してはいけませんか?

承認された回答:

問題は、> example.txt shuf example.txtの前に、そのファイルへの書き込みを開始します それを読み始めます。まだ出力がないので、example.txt 空です、shuf 空のファイルを読み取り、shufとして読み取ります この場合、出力は行われません。最終結果は空のままです。

他のコマンドでも同じ問題が発生する可能性があります。 > example.txt cat example.txtの前にファイルを強制終了する可能性があります それを読み始めます。シェルがそれらを実行する順序と、catにかかる時間によって異なります。 実際にファイルを開きます。

このような問題を完全に回避するには、shuf example.txt > example.txt.shuf && mv example.txt.shuf example.txtを使用できます。 。

または、shuf example.txt --output=example.txtを使用することもできます 代わりに。


Linux
  1. ファイルが存在する場合にforループの`zip`が機能するのに、存在しない場合は機能しないのはなぜですか?

  2. コマンドSed‘1!g; h; $!d’は、ファイルの内容をどのように逆にしますか?

  3. 「java」コマンドは、インストールされている JVM を実行しません

  1. ターミナルに出没する8つの不気味なコマンド

  2. stat コマンドはファイルのブロックをどのように計算しますか?

  3. Linux sed コマンドでターゲット ファイルが変更されない

  1. 初心者向けの例を含むShufコマンドチュートリアル

  2. 正規表現がXで機能するのに、Yでは機能しないのはなぜですか?

  3. 一部のコマンドでBashプロセス置換が機能しないのはなぜですか?