解説
シェルの「|」と「>」は何が違う?次のコマンドへ渡すか、ファイルへ保存するかを試そう
コマンドの後ろにある「|」と「>」。どちらも出力を動かすように見えるけれど、行き先と役割が違うよ。小さな文字列で比べてみよう。

コマンドの後ろにある「|」と「>」。どちらも出力を動かすように見えるけれど、行き先と役割が違うよ。小さな文字列で比べてみよう。
Bashと、wc・catが使える環境を用意する。空の練習フォルダーで試し、本当の資料と同じ名前のファイルを使わない。このページではWebブラウザの中でコマンドは実行しないよ。
まず標準出力を知る
標準出力は、コマンドが通常の結果を送り出すための出力先。いつも画面と決まっているわけではなく、次のコマンドやファイルへつなぐこともできる。
標準入力は、コマンドが内容を受け取る入り口。この二つをつなぐのが、ここで使うパイプ「|」だよ。
printf 'apple\npear\n' | wc -l
printfは二行の文字を出力し、wc -lがそれを受け取って改行の数を数える。この例の結果は2。見える空白の数や整列の仕方は、環境で違うことがある。
「>」ならファイルへ向ける
mkdir pipe-save-practice
cd pipe-save-practice
printf 'apple\npear\n' > fruit.txt
cat fruit.txt
この例では結果をfruit.txtへ書き、catで読み直す。最初の行で画面に果物が出ないのは、標準出力の行き先をファイルへ変えたからだよ。
重要なのは、>が既存ファイルを通常は上書きすること。Bashのnoclobberなど設定によっては上書きが拒否される場合もあるが、普段から内容を保護してくれると頼り切らないようにしよう。
組み合わせると、数えた結果を残せる
printf 'apple\npear\n' | wc -l > count.txt
cat count.txt
最初の出力はwcへ渡り、その結果がcount.txtへ保存される。fruit.txtの二行と、count.txtの数値2は、保存しているものが違うんだ。編集部では、この三つの例をBashで実行し、二行の内容と、数を保存した結果を確認した。
| 書き方 | 出力の主な行き先 |
|---|---|
| printf ... | 通常は画面など、引き継いだ標準出力 |
| printf ... | wc -l | wcの標準入力 |
| printf ... > fruit.txt | ファイル |
| printf ... | wc -l > count.txt | wcで数えた後、ファイル |
エラーも全部つながるわけではない
通常の「|」がつなぐのは標準出力。標準エラーという別の出力先は、そのまま画面へ出ることがある。エラーまで消えた、または全部保存できたと決めつけないようにしよう。
また、通常のBashではパイプラインの終了状態は最後のコマンドの状態になる。最後が成功しても、途中の失敗を見逃す場合があるので、重要な処理は各段階の確認やpipefailの設計も必要になるよ。
うまくいかないとき
行数が0なら、wc -lは文字の行の見た目ではなく、改行を数える点を確認する。保存先が見つからないなら、pwdとファイル名を見る。練習用の二つのファイルは、内容を確かめてから自分のファイル管理画面で片付ければよいよ。

みんなのコメント 0
感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。
最初のコメントをどうぞ。