
5 分ごとに上書きされるファイルを で監視したいのですが、古いファイル記述子を表示したままにせずに、新しいファイル記述子に従うようにless
するにはどうすればよいでしょうか。ファイルが長すぎて 1 つのターミナル ウィンドウに収まらないため、実行できません。less
watch "cat file"
答え1
この効果を得るには、でファイルを表示しているときに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 を実行します。
答え2
でも同様のことを行うことができます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
答え3
次のコマンドを試してみてください: tail -f file
答え4
古いですが、非常に優れた「less」のようなプログラム(「ページャー」)を見つけました。これには、ファイルを更新する「R」コマンドがあります。
それは呼ばれています「lv」Ubuntu にインストールするには、以下を使用します。
sudo apt install lv
ただし、自動リロード機能はないようです。