【Bash】パイプをセミコロンに書き換えるとイメージしやすかった


Bashを使った開発や作業では、パイプラインを繋げることが多々あるかと思います。
最近必要に駆られて学習を始めたのですが、今ひとつしっくり来ず・・・。
そんな中、以下のコードをみて、なるほど、と思ったので、メモ。


# パイプの方
command1 | command2

# セミコロンの方
command1 > tmp; command2 < tmp; rm tmp

セミコロンの方の例では、tmpというファイルを生成しcommand1の結果を保存しています。そして、その次の処理でそのデータを呼び出して、command2に渡し、仮作成したtmpファイルは不要なので、最後の処理で削除しています。

ただし、厳密には上記のコードには違いがあります。パイプの方は並列で処理が走り、より効率的です。理由がない限りはパイプの方で書きましょう。並列処理なのに前のコマンドの結果を待ってくれるのは素敵ですね。