Posted at

Linuxで標準出力とファイルの両方に「リアルタイムで」出力する

More than 1 year has passed since last update.


したいこと

何らかのプログラムで実行途中のログが標準出力へと出力されるが,実行に時間がかかるので,途中経過を「リアルタイムで」確認しながら動かしたいし,同時にその記録をファイルに残しておきたい.


パイプでteeコマンドへ流してみる → 少々もやもや

そういえばteeコマンドというのがあったな,ということで,



$ ./myprogram | tee output.log



ところが,Ubuntu 16.04.03 LTS で試したところ(2018.02.01) 出力がバッファされてしまうようで,しばらく時間が経ってから標準出力にバサッと書き出され,しばらくまた時間が経ってから…というのを繰り返す.ちゃんと標準出力にもファイルにも出力されるが,「リアルタイムで」ないところがモヤモヤする.


解決方法

調べてみると,Stack Overflow の記事 で,こういうのがあって,試してみると成功し,「リアルタイムで」出力されるようになった.



$ script -c ./myprogram /dev/null | tee output.log


検証環境 (2018.02.02)

OS
バージョン

Linux Ubuntu
16.04.03 LTS

なお,Ubuntuにはほとんど手を入れていない状態.