🐚

シェルのパイプ | はなぜ標準入力を待てるのか

2023/03/31に公開1

疑問

シェル[1]のパイプ | は左右のコマンドを並列実行するものですが、例えば cat foo.log | wc -l のようなシェルは wc が左のコマンドの標準出力の結果を計算するので、並列に実行したら待てないじゃん!という疑問がありました。

答え

パイプの機能ではなく、各コマンドが配慮しているよう。
つまり、基本的にコマンド側の仕様が「引数がなかったら標準入力を待つ」という処理になっているようです。

例えば、cat を引数なしで呼ぶと、ずっと待機中になります。

なお、echo はそうならないのですが、何かきっとあるんでしょう...

脚注
  1. ここでは bash と zsh を念頭に置いています。 ↩︎

Discussion

ko1nksmko1nksm

説明が意味不明なものとなっているので、基本的なところを勘違いされているようですが、

シェルのパイプ | は左右のコマンドを並列実行するものですが

まず、一つだけ。シェルのパイプ | は左右のコマンドを並列実行するものではありません。