Hatena::ブログ(Diary)

下手の考え休むに似たり このページをアンテナに追加 RSSフィード

2007-11-05 標準出力と標準エラーとfifo

[]標準出力と標準エラー出力を表示させながらも、それぞれ別のファイルに書き出す。 00:41 標準出力と標準エラー出力を表示させながらも、それぞれ別のファイルに書き出す。を含むブックマーク 標準出力と標準エラー出力を表示させながらも、それぞれ別のファイルに書き出す。のブックマークコメント


mkfiloとteeで出来る

「標準出力を画面に出しながらも、ファイルに書き出す」だけなら

command | tee log.txt

とすれば出来る。
標準エラー出力に対しても同じ事を、別々のファイルに書き出す事をしたい。

そのためにはmkfifoを使えばいい。
リンク先にまさにその事が書いてある。
http://mlog.euqset.org/archives/linux-users/102278.html

方法は

  1. 二つのfifoを作る
  2. fifoをteeにそれぞれリダイレクトする
  3. プログラムを、先のfifoにリダイレクトする形で実行する
  4. 終わったらfifoを削除

順番にスクリプトにすれば

mkfifo fifo_out
mkfifo fifo_err
tee log_out < fifo_out &
tee log_err < fifo_err &
command 1> fifo_out 2> fifo_err 
rm fifo_out fifo_err

teeを使ってるところでは&を忘れずに。