コマンド出力を画面に表示しつつ、例えばメールで送信したいような場合にどうするか?
Bashスクリプトでは、tee
コマンドを利用することで、出力を画面に表示しつつ、他のコマンドにパイプすることができます。以下のように1行にまとめられます:
echo "Hello" | tee /dev/tty | mail -s "Hello" test@example.com
解説
tee /dev/tty
tee
コマンドは、標準入力を受け取り、その出力を複数の場所に送ることができます。/dev/tty
は現在のターミナル(画面)を意味し、出力を画面に表示します。
- パイプ (
|
) の流れ
echo
で生成した文字列がまずtee
に渡されます。tee
はその文字列を画面 (/dev/tty
) に表示し、さらに同じ文字列を次のコマンド(mail
)に渡します。
これにより、1行で「画面に表示」と「メール送信」の両方が実現できます。