端くれプログラマの備忘録 Unix [Unix] 画面と他コマンドの両方へパイプ

[Unix] 画面と他コマンドの両方へパイプ

コマンド出力を画面に表示しつつ、例えばメールで送信したいような場合にどうするか?

Bashスクリプトでは、tee コマンドを利用することで、出力を画面に表示しつつ、他のコマンドにパイプすることができます。以下のように1行にまとめられます:

echo "Hello" | tee /dev/tty | mail -s "Hello" test@example.com

解説

  1. tee /dev/tty
  • tee コマンドは、標準入力を受け取り、その出力を複数の場所に送ることができます。
  • /dev/tty は現在のターミナル(画面)を意味し、出力を画面に表示します。
  1. パイプ (|) の流れ
  • echo で生成した文字列がまず tee に渡されます。
  • tee はその文字列を画面 (/dev/tty) に表示し、さらに同じ文字列を次のコマンド(mail)に渡します。

これにより、1行で「画面に表示」と「メール送信」の両方が実現できます。