cre8cre8
AskMe♥

sh -c で実行したコマンドのログ出力方法
〜teeの優しく右手添え〜

sudo sh -c 'foo.sh >> log' とした時、logに期待したログが書き出されなくて
困った経験はないですか?
私はあります。foo.sh

bash
1echo 'This is log' >> log
2echo 'That is log' >> log
3echo 'I love log' >> log
4# ... 処理が続く ...

を記述してゴリ押しで乗り切っていました。スマートじゃないですね。
そこで、今回はスマートにログを出力する方法を書こうと思います。

teeコマンドさんです。teeコマンドさんマジかっけぇ...

teeコマンドさんは受け取った結果をファイルに出力しつつ標準出力に吐き出してくれるコマンドです。
はい。 受け取った結果をファイルに出力します。
大事なことなので二回言いました。

では、tee コマンドさんを使用してエレガントに書いてみましょう。

bash
1sh -c 'foo.sh | tee -a log'

ね?簡単でしょ?
なお、-a オプションですが、こちらは指定したファイルに追記します。
もし、-a オプションをつけなかったら、ログが毎回上書きされちゃうので、
過去のログがなくなっちゃいます。

それでは、最後にteeコマンドさんを応用して、cronでも使用してみましょう!

bash
1# (流派によっては、/etc/crontabや/etc/cron.d/以下のファイルを編集してください)
2$ crontab -e
3
4# 編集内容
515 * * * * sh -c 'cron-script.sh | tee -a log'

おぉ…エレガントやん…

≪ 前の記事
Railsのform_forの使い方が
リファレンス見てもいまいちわからなかったので
俺式に全力で整理してみた
次の記事 ≫
Pythonのリスト(配列)で、文字列の日付(日時)を基準にソートしようとしたときの、備忘録

いいねやコメントを送っていただけると中の人がしっぽ振って大喜びします♪

あなたへのおすすめの記事