2017-08-17 14 views
0

私は断続的にstdoutに印刷するプログラムを持っています。私は画面上の出力を見て、それをファイルにリダイレクトしたいと思います。次のようにstdoutを連続して印刷してファイルに書き込む

私はteeを使用することができます。

foo | tee ./log.txt 

しかし、これはfooが、私は私のプログラムの進捗状況を観察することができません終了しているだけで、画面への出力を印刷します。

プログラムの出力を継続して表示し、ログファイルにリダイレクトする方法はありますか?

+2

stdoutがttyではなくパイプに接続されていると、おそらくlibcの効果が4k出力バッファを使用して表示されます。ですから、必ず 'foo'が終了するのを待つ必要はありませんが、それは4kの出力を生成するためです。この質問への回答にはいくつかの回避策があります:https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe –

+0

スタンドアロンとして 'foo'を実行しても、この効果は出ません連続印刷)。それはまだバッファーに起因するのでしょうか? – kevinshms

+3

はい、 'foo'をスタンドアロンで実行している場合、出力はttyになり、通常の行指向のバッファリングが得られます。ファイルまたはパイプにリダイレクトすると、libcは出力がttyではないことを検出し、4k出力バッファに切り替えます。 –

答えて

0

出力をファイルに書き込んでライブ表示することはできますか?

$> foo > ./log.txt & tail -f ./log.txt 
関連する問題