コマンドをパイプでつなげると並列で動作する

昨日の記事に関連するメモ

nanka.hateblo.jp

完全に勘違いしていました。

パイプを繋ぐと左からコマンドが順次実行されるとばかり思い込んでいましたが、並列でそれぞれ動作してるんですね..

極端なはなしですが↓を実行すると即座に2が出力されて3秒後に1が出力されて終了する

$ sleep 3 | (read i; echo '1' 1>&2) | echo '2'

標準入力を受け取るコマンドが正しく動いているのは、入力待ち状態になっているから

上の例で言うと read i がsleep3の出力を待っているので、2 -> 1の順で出力される

よくよく考えたらあたり前のことだった..

パイプはその名の通り、それぞれのプロセスの入出力をつなぎ合わせてるだけだと覚えればよさそう