「ファイルの更新」のような機能が少ない

「ファイルの更新」のような機能が少ない

5 分ごとに上書きされるファイルを で監視したいのですが、古いファイル記述子を表示したままにせずに、新しいファイル記述子に従うようにlessするにはどうすればよいでしょうか。ファイルが長すぎて 1 つのターミナル ウィンドウに収まらないため、実行できません。lesswatch "cat file"

答え1

この効果を得るには、でファイルを表示しているときにFコマンド ( ) を発行します。フォローを停止してページングに戻るには、Shift+FlessCtrl+C

ファイルは5分ごとにしか変更されないので、 を使っtail -fてより長いスリープ時間を指定することもできます-s(デフォルトは1秒)。たとえば、

tail -f -s 60 myfile

myfile60 秒ごとに出力をチェックします。

編集: 誤解を招く質問のため、上記の回答は不十分でした。2 回目の試みは次のとおりです。

less5 分ごとに同じファイルを再度開くには、次のようにします。

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

これにより、5 分後に親プロセスを強制終了するように指示された別のシェル プロセスをバックグラウンドで実行するサブシェルが生成されます。次に、 でファイルを開きますless。バックグラウンド シェル コマンドが親サブシェルを強制終了すると、"less" コマンドを含むすべての子が強制終了されます。次に、ループによってプロセスが再び開始されます。

私が知っている限り、これを強制終了する唯一の簡単な方法は、元のシェルが使用されているターミナルを強制終了することです。それができない場合は、「killfile」トリックを使用できます。

touch killfile
while [ -f killfile]; do stuff; done

実行を停止するにはstuffrm別のシェルで 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できます。lesslessvim

/usr/share/vim/vim73/macros/less.sh --servername refresh_session

答え3

次のコマンドを試してみてください: tail -f file

答え4

古いですが、非常に優れた「less」のようなプログラム(「ページャー」)を見つけました。これには、ファイルを更新する「R」コマンドがあります。

それは呼ばれています「lv」Ubuntu にインストールするには、以下を使用します。

sudo apt install lv

ただし、自動リロード機能はないようです。

関連情報