で5分ごとに上書きされるファイルを見たいless
。less
古いファイル記述子を表示したままにする代わりに、どのようにして新しいファイル記述子を追跡させることができますか?watch "cat file"
ファイルが長すぎて1つのターミナルウィンドウに収まらないため、この処理は行われません。
tail -f
のmanページで定義されているように、ファイル記述子に従うことを意味しました。それにもかかわらず、私は私の質問を明確にしました。
で5分ごとに上書きされるファイルを見たいless
。less
古いファイル記述子を表示したままにする代わりに、どのようにして新しいファイル記述子を追跡させることができますか?watch "cat file"
ファイルが長すぎて1つのターミナルウィンドウに収まらないため、この処理は行われません。
tail -f
のmanページで定義されているように、ファイル記述子に従うことを意味しました。それにもかかわらず、私は私の質問を明確にしました。
回答:
この効果を得るには、でファイルを表示しながらF
コマンド(Shift+F
)を発行しますless
。フォローを停止してページングに戻るには、Ctrl+C
ファイルは5分ごとにしか変更されないのでtail -f
、より長いスリープ時間を使用して指定することもできます-s
(デフォルトは1秒)。例えば、
tail -f -s 60 myfile
myfile
60秒ごとに出力をチェックします。
編集:誤解を招くような質問のため、上記の回答は不十分でした。2回目の試行は次のとおりです。
less
5分ごとに同じファイルを再度開くには、次のことを試してください。
while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done
これにより、5分後に親プロセスを強制終了するように指示された別のシェルプロセスをバックグラウンドで実行するサブシェルが生成されます。次に、でファイルを開きますless
。バックグラウンドのシェルコマンドが親サブシェルを強制終了すると、「less」コマンドを含むすべての子が強制終了されます。その後、ループはプロセスをもう一度開始します。
これを殺すために私が知っている唯一の簡単な方法は、元のシェルがあるターミナルを殺すことです。それが受け入れられない場合は、「killfile」トリックを使用できます。
touch killfile
while [ -f killfile]; do stuff; done
実行を停止するstuff
にrm
は、別のシェルのkillfile。
watch -n 1 less <filename>
でも同様のことができますvim
。
のサーバーセッションを開始しますvim
。
vim -R --servername refresh_session
次に、別のコンソールで、ファイルの更新を監視し、ファイルが更新されるとすぐにファイルをリロードするようにvimセッションに指示します。
inotifywait -e close_write -m your_log_file | while read filename events; do
vim --servername refresh_session --remote $filename
done
いくつかの落とし穴。
vim
、clientserver
機能が組み込まれていない場合は機能しません。inoifywait
ファイルが削除されると機能しなくなります。したがって、ファイルが上書きされることを願っています。もちろん、それを回避することも可能です。また、よりless
経験をしたい場合は、less
マクロを使用してでless
キーバインディングを取得できますvim
。
/usr/share/vim/vim73/macros/less.sh --servername refresh_session
尾はあなたの友達です。"tail -f filename"を指定すると、新しい行が表示されます。
または、ファイルの途中で行われた変更を探している場合は、数分ごとにスクリプトを実行して、一時的な場所にファイルのコピーを作成し、それに対して差分を実行することができますか?
tail -f
ますが、古いものを読み取ります。