ターミナルでいくつかのコマンドを実行していたところ、パイプコマンドを実行するときにUnix / Linuxはショートカットを使用するのでしょうか?
たとえば、100万行のファイルがあり、その最初の10行にhello world
が含まれているとします。 。コマンドgrep "hello world" file | head
最初のコマンドは10行が見つかるとすぐに停止しますか、それともファイル全体を最初に検索し続けますか?
承認された回答:
ある種。シェルは、実行しているコマンドが何を実行するかを認識していません。一方の出力をもう一方の入力に接続するだけです。
grep
の場合 「helloworld」、次にhead
という10行以上を検索します 必要な10行すべてがあり、パイプを閉じます。これにより、grep
が発生します SIGPIPEで強制終了されるため、非常に大きなファイルのスキャンを続行する必要はありません。