標準出力をファイルにリダイレクトし、他のタスクと同時に同じファイルから読み取る方法は?

標準出力をファイルにリダイレクトし、他のタスクと同時に同じファイルから読み取る方法は?

Ubuntu Linux Bashでリモートでタスクを実行し(時間がかなり時間がかかる)、ファイルにnohupリダイレクトしたいと思います。たとえば、次のようになります。stdout

nohup task > out.txt &

場合によっては、出力ファイルを見て作業の進行状況を確認したい場合があります。

cat out.txt

Bashが書き込みのためにファイルを開くたびにファイルの内容が空のように見えるので、私はまだこれを行う方法を見つけることができませんでした。

stdoutだから私の質問は: "共有"リダイレクトを許可するLinuxコマンドはありますか?

ベストアンサー1

Bashが書き込み用にファイルを開くたびに、ファイルの内容は空白のように見えます。

しかし、実際にはそうではありません。実際の状況は、バッファー出力 - 一定時間メモリに蓄積され、チャンクとしてファイルに書き込まれます。メモリバッファのサイズは数キロバイトに固定されています。各ファイル書き込みには比較的高いオーバーヘッドがあるため、これはパフォーマンスのために行われます。したがって、最初はプログラムの出力を見ることはできませんが、少しずつ出力されるのがわかります。これはbashとは関係ありません。

すぐに出力を表示するには、次のようにします。プログラムを開始 unbuffer(からexpectソフトウェアパッケージ)。即時性のためにパフォーマンスを交換します。

2番目の問題は、catすでにエクスポートされた出力を表示し、ファイルの終わりに達するとすぐに終了することです。出力の追加中に出力を読み続けるには、次のようにします。tailフォローモード。

nohup unbuffer task >out.txt &
tail -n +1 -f out.txt

終了するにはCtrl+を押します。代わりに、対応するフォローモードを使用できます(読み取りを中止するには+を押します)。CtailtaillessFCtrlC

おすすめ記事