🐚
シェルのパイプ | はなぜ標準入力を待てるのか
疑問
シェル[1]のパイプ |
は左右のコマンドを並列実行するものですが、例えば cat foo.log | wc -l
のようなシェルは wc
が左のコマンドの標準出力の結果を計算するので、並列に実行したら待てないじゃん!という疑問がありました。
答え
パイプの機能ではなく、各コマンドが配慮しているよう。
つまり、基本的にコマンド側の仕様が「引数がなかったら標準入力を待つ」という処理になっているようです。
例えば、cat
を引数なしで呼ぶと、ずっと待機中になります。
なお、echo
はそうならないのですが、何かきっとあるんでしょう...
-
ここでは bash と zsh を念頭に置いています。 ↩︎
Discussion
説明が意味不明なものとなっているので、基本的なところを勘違いされているようですが、
まず、一つだけ。シェルのパイプ | は左右のコマンドを並列実行するものではありません。