スクリプトでパイプを使用すると、シェルが出力をどのようにまたはどのように抑制できますか?コードがあるとしましょう。
cat file | wc -l
行数だけが印刷されます。シェルはファイルの内容をどこに保存しますか?たとえば、検索と同じ
find . -type f -exec grep -o 'hello' {} \; | wc -l
シェルはどうしたの?
答え1
したがって、あなたの例では次のようになります。
cat file | wc -l
結果の出力は、パイプを介してストリームに接続されたストリームcat
に渡されます。stdout
stdin
wc
実際の実装では、各パイプは特定のサイズのバッファに関連付けられます。このバッファはstdout
左プロセスのデータで埋められ、stdin
右プロセスで使用されます。どちらのプロセスも並列に実行され、右側のプロセスがすべてのデータを十分に高速に消費できず、バッファがいっぱいになると左側のプロセスをブロックするメカニズムがあります。
詳細については、次を参照してください。ここ。
答え2
完全な技術的な答えはありませんが、提供された例では、シェルは単に標準出力ファイル記述子を2番目のコマンドの標準入力ファイル記述子にリンクします。データは、あるプロセスから別のプロセスに渡されるときにデータをバッファリングするために必要なメモリを除いて、どこにも保存されません。