stdoutをファイルにリダイレクトし、別のタスクと同時に同じファイルから読み取る方法は?
Nohup
を介してUbuntuLinux Bashでリモートでタスク(非常に長い時間がかかります)を実行し、stdout
をファイルにリダイレクトしたいと思います。例:
Nohup task > out.txt &
時々、出力ファイルを調べてタスクの進行状況を確認したいと思います。
cat out.txt
ファイルがBashによって書き込み用に開かれている限り、ファイルのコンテンツは空として表示されるため、その方法はまだわかりません。
だから私の質問は: '共有' stdout
リダイレクトを許可するLinuxコマンドはありますか?
ファイルがBashによる書き込み用に開かれている限り、ファイルの内容は空として表示されます。
それは正確には何が起こっているのかではありません。何が起こっているのかというと、タスク buffers その出力—しばらくの間メモリに蓄積されてから、チャンクでファイルに書き込まれます。インメモリバッファのサイズは数キロバイトに固定されています。各ファイルの書き込みには比較的高いオーバーヘッドがあるため、これはパフォーマンスのために行われます。したがって、最初はプログラムの出力は表示されませんが、少しずつ表示されます。これはbashとは何の関係もありません。
出力をすぐに確認したい場合は、 プログラムを開始するunbuffer
(from expect
=ソフトウェアパッケージ)。あなたはパフォーマンスを即時性と交換します。
2番目の問題は、cat
がすでに出力された出力を表示し、ファイルの終わりに達するとすぐに終了することです。追加されたときに出力を読み続けたい場合は、 tail
のフォローモードを使用します。
Nohup unbuffer task >out.txt &
tail -n +1 -f out.txt
押す Ctrl+Ctail
を終了します。 tail
の代わりに、less
とそのフォローモードを使用できます(F
を押します。 Ctrl+C 読むのをやめる)。