プログラムはデータの個々の行を時系列で同じ行に出力し、書き込まれるたびに行を上書きします。すべての出力ラインをキャプチャして改行区切りファイルに書き込むにはどうすればよいですか?通常のリダイレクトではこれは行われません。
答え1
\r
これが結果を使用して行われると仮定\r
します\n
。
yourprogram | tr '\r' '\n' > logfile
違いを見る
printf "Hello\rworld\n"
そして
printf "Hello\rworld\n" | tr '\r' '\n'
これがなければ、ログファイルにリダイレクトされます。〜するすべての出力をファイルに保存します。less
ファイルを表示する代わりにを使用して表示できますcat
。 (前の行を上書きせずにマークさless
れます。)\r
^M
プログラムが端末に直接書き込む場合は役に立ちません。この場合、すべての端末出力をキャプチャするプログラムを使用することもできます。例は次のとおりですscript
。
script -c yourprogram logfile
プログラムを起動し、すべての出力をキャプチャしますlogfile
。これを理解するには、ログファイルの特殊文字を処理する必要があります。これはless
ユーザー(または合理的な編集者)に役立ちます。