[Shell] 標準出力とファイル出力を同時に行う

kshで、とあるJavaプログラムの起動シェルを作っていたところ、起動時に標準出力に表示されるメッセージをファイルにも出力してほしい、というお願いが来ました。

リダイレクトとか駆使して何とかしてくれ、って感じだったのですが、確か両方に出力できるコマンドがあったようななかったような…。記憶を頼りに、ファイル操作関係のコマンドのmanをあさっていたら見つけたので、備忘録がてらメモメモ。

メモメモ…と言いつつ、実際は一行で終わってしまう程度のことですが、せっかくなのでサンプルスクリプトも載せておこう。

#!/bin/ksh
echo "Hello World!!" | tee sample.log

こんな感じのシェルスクリプトを組んで動かしてみると、画面に「Hello World!!」と表示しつつ、sample.log というファイルにも「Hello World!!」と出力します。もしファイルが既に存在している場合は、上書きされます。

上書きではなく、今あるファイルに追記したい場合は、

#!/bin/ksh
echo "Hello World!!" | tee -a sample.log

とすることで追記モードに。もしファイルが存在しなければ作ってくれるので、ログファイルに出力させる場合は常にこのオプションをつけておくといいかも。

リダイレクトを使ってファイル出力する方がお手軽でいいけど、こちらのコマンドを使ったほうがよりプログラムっぽい感じがするのは気のせいかな?気のせいですね、はい。

ちなみに、上記サンプルでは ksh を使っていますが、シェルならどれでも使えると思います。ksh、bash、cshでは確認済み。

スポンサーリンク

この記事をシェア

アカウントをフォロー