2012-05-22 2 views
5

teeコマンドを初めて使用しました。1つのコマンドでも速やかにteeコマンドを使用する

プログラムを実行しようとしていますが、処理に時間がかかりますが、進行中の情報が表示されます。私は出力をファイルに保存し、シェルの出力を見るために 'tee'を使っています(bash)。

しかし、問題はteeです。コマンドの最後まで出力をシェルに転送しません。 これを行う方法はありますか?

私はDebianとbashを使用しています。

答えて

3

これは実際に実行しているコマンドの出力量と実装状況によって異なります。何もプログラムは直接stdoutまたはstderrに物事を印刷し、それを常にフラッシュする義務付けられていません。従って、ランタイムルーチンの1つ、例えばprintfを使用してある量のデータが書き込まれた後で、ほとんどのCランタイムの実装がフラッシュされても、実装によってはこれは真実ではないかもしれません。

teeすぐには出力されません。コマンドの実行の最後に入力された可能性があります。 かもしれないそれは正確なコマンドに言及するのに役立つでしょう。

+0

あなたは素晴らしい点を述べました!私は潮吹きを忘れていた。このコマンドは私自身のCプログラムの1つです。私はprintfの後にfflushを追加しました。今それは働いている。迅速なご協力ありがとうございました。 – Rakib

+0

@Rakib Hasan:これはあなたのために今やうれしいです。様々なスクリプト言語でも見過ごされています。 – 0xC0000022L

0

あなたは私がより良い答えを与えることができるが、それがあるとして

(for i in `seq 10`; do echo $i; sleep 1s; done) | tee ./tmp 

は、teeコマンドの適切な使用方法ですと動作するように思わ使用状況を投稿した場合。あなたのコマンドでパイプの前に部品を交換し、あなたは行くのが良いはずです。

1

経験した問題は、おそらくバッファリングに関連しています。 次のようなstdbufコマンドがあります。

stdbuf - 標準ストリームのバッファリング操作が変更された状態でCOMMANDを実行します。

関連する問題