2017-09-25 5 views
1

中間結果を端末に出力し、常にその行を書き換えるバイナリプログラムがあります。内部的には、おそらくsystem("echo -e '\rsome_useful_number')のようなものを使用しています。 CRのみを使用すると改行文字が欠けています。

は私がスクリプトの一部として ./program | tee log.txt./program>log.txtなどを実行したときに私が得ることがちょうどある data 1data 2data 3、...:

は、だから私は見て録音したい(順次)でありますlast_result

欠けている改行文字を「挿入」するためにスクリプトを調整するにはどうすればよいですか?

+1

次の操作を実行できます。 './program | tr '\ r "' \ n" ' – anubhava

答えて

0

CRは「現在の行の先頭に戻る」ことを意味します。 したがって、次の行が前の行を上書きしています。つまり、すべての行はそこにありますが、最後の行だけが表示されます。 @anubhavaが言ったように

first_line^Mnext_line^Mlast_line 

./program | tr '\r' '\n' | tee log.txtまたは./program | tr '\r' '\n' >log.txtをファイルに書き込む前にこの問題を解決する、または単にファイルを表示するためにcat log.txt | tr '\r' '\n'を使用しますless log.txtの代わりcat log.txtを実行

はあなたのような何かを示さなければなりません。

PS:

プログラムの出力は標準エラー出力をstderrにが最初stdoutに追加する必要があります:

実はあなたは UUoC -Award :)

更新を避けるためにtr '\r' '\n' < log.txtを使用する必要があります

./program 2>&1 | tr '\r' '\n' | tee log.txt 

最後に、元のCR出力をコンソールの標準エラー出力に保存したい場合:

./program 2>&1 | tee /dev/stderr | tr '\r' '\n' > log.txt 
+0

私のプログラムはstderrに出力されていて、stdoutに出力されていなかったので、解決策はそのままでは機能しませんでした。ありがとう。 – Gab

関連する問題