Est-il possible d'actualiser dynamiquement la commande less?

142

J'aime la watchcommande, mais elle a ses limites .

Je suis curieux de savoir si je pourrais imiter la fonctionnalité de watchavec less. Je recherche principalement la possibilité de faire défiler mon répertoire car il est modifié dynamiquement via un script en cours d'exécution.

Zaid
la source
Je recherche tail -f foo.log | grep baret je suis en mesure de modifier dynamiquement la commande grep en redémarrant le pipeline tail / grep.
Alexander Mills

Réponses:

120

Dans less, vous pouvez taper Fpour continuer à lire à la fin d'un fichier (comme tail -f); vous pouvez taper :eun nom de fichier pour afficher un fichier différent, mais malheureusement, si vous entrez le nom du fichier actuel, le fichier lessne sera pas rechargé. Cependant, il existe un truc pour le faire relire le fichier actuel, suggéré par sabgenton : tapez :eet entrez le nom d'un fichier inexistant ; cela fait moins pour afficher un message d'erreur et ensuite recharger le fichier en cours.

Si vous cherchez une alternative à watch ls, voici quelques exemples:

  • Les gestionnaires de fichiers modernes (par exemple Nautilus, Thunar, Konqueror, Dolphin, Finder) actualisent les vues en temps réel.
  • Emacs n'a pas d'actualisation en temps réel, mais avec auto-revert-mode, il rechargera le fichier ou le répertoire toutes les 5 secondes (le délai est configurable).
  • Bien que w3m soit principalement un navigateur Web, il permet de visualiser les répertoires et les fichiers texte. Appuyez sur Rpour recharger l'URL (locale).
Gilles
la source
6
Pour moi: e randomnamejkdlfjldf ne parvient pas à charger le nom de fichier inexistant, puis se recharge dans le fichier actuel: D
sabgenton
1
@sabgenton Merci, je ne le savais pas. C'est un bon truc. Je l'ai ajouté à ma réponse, mais vous pouvez l'afficher comme une réponse personnelle (que j'espère que Zaid acceptera).
Gilles
1
@CMCDragonkai Non, less +Fsurveillez uniquement le contenu ajouté. Utilisez :e nonexistentfilepour relire une entrée complètement modifiée.
Gilles
1
Existe-t-il un indicateur de ligne de commande pour cela?
CMCDragonkai
3
@PaulWagland Non, Rle fichier n'est pas actualisé de manière fiable. Il rafraîchit l'écran et efface certains tampons d'entrée, mais il ne recharge pas les données du fichier dans toutes les circonstances (uniquement si le fichier est volumineux? Je n'ai pas approfondi le code).
Gilles
66

Shift+Ffera lesssemblable à tailf. Autrement dit, il est actualisé si davantage de données sont ajoutées au fichier.

balki
la source
7
Notez que cela ne fonctionne que pour les ajouts. Si des lignes sont supprimées ou modifiées sur place, lessles modifications ne seront pas affichées.
Nathaniel M. Beaver
Comment puis-je arrêter de suivre le mode et revenir au mode défilement?
Tom Hale
1
<kbd> Ctrl + C </ kbd>
balki
1
Mon expérience est que cela tue la commande canalisant les données si vous utilisez $COMMAND | less. Je me demande s'il y a un bon moyen de contourner cela? Vous pouvez faire des choses comme $COMMAND > /tmp/file & less /tmp/filemais ce n'est pas très gentil.
Att Righ
@AttRigh Je n'ai jamais tué ma commande (cependant, j'ai lu les journaux des commandes en cours d'exécution de cette façon, je ne me connecte pas à moins, techniquement)
Jena
42

Tapez simplement:

less +F filename

Cela émule en appuyant sur "F" dans l'éditeur.

jhclark
la source
1
Merci; a ajouté le pseudonyme alias check="less +F"à mon .bashrc.
Luke Davis
23

manles pages peuvent être très informatives. Ne soyez pas intimidé par eux. Parmi tout le reste, man lessvous pouvez utiliser la Rcommande pour:

   R      Repaint the screen, discarding any buffered input.  Useful if the file is changing while it is being viewed.

(Je me rends compte que cette question a plus de 6 ans, mais elle est abordée dans les recherches sur Google. Je ne suis donc pas le seul à avoir cliqué sur le lien pour accéder à cette page.)

Destenson
la source
7
Ceci repeint l'écran au cas où il serait perturbé par la sortie d'un autre programme. Il ne recharge pas systématiquement le fichier. Je n'ai pas approfondi le code pour voir ce qu'il fait. Les fichiers courts expérimentalement ne sont pas rechargés. Je ne suis vraiment pas intimidé par les pages de manuel et je dis que cette description est mal formulée: "repeindre" ne signifie pas que les entrées sont relues, et le comportement actuel ne correspond pas tout à fait à "utile si le fichier est en train de changer" Je ne sais pas car je ne sais pas ce que la commande est censée faire) ..
Gilles
Je ne suis pas un expert et je n'ai pas lu le code source de less non plus, mais cela permet d'oublier ce qu'il sait déjà sur le fichier et de le recharger, en actualisant sa sortie en fonction des entrées rechargées. La question se lit "Existe-t-il un moyen d'actualiser dynamiquement la commande less?" Si j'avais lu l'explication de la question plus en profondeur avant de répondre, je n'aurais peut-être pas répondu, car ils continueront en disant qu'ils veulent "faire défiler mon répertoire car il est modifié dynamiquement via un script en cours d'exécution". moins ne serait pas la bonne commande pour cela.
destenson
Fonctionne bien pour moi, même lorsque vous utilisez des fichiers de 3 octets de long. Je ne peux pas imaginer pourquoi cela ne fonctionnerait pas aussi pour les gros fichiers.
Addison
1
Génial! Pour moi, cela fonctionne pour les fichiers courts et longs. J'ai juste remarqué deux problèmes possibles: 1. Je lessn'ai pas rouvert le fichier en utilisant son nom de fichier - c'est-à-dire que lorsque l'inode du fichier a changé (comme lors de l'écrasement du fichier avec mv), l'ancien contenu du fichier est resté (probablement l'ancien inode a été relu) - - 2. La première ligne affichée commence probablement avec le même décalage d'octet que dans le contenu du fichier d'origine. Ainsi, lorsque les longueurs de ligne changent, la première ligne affichée peut être incomplète et les lignes affichées peuvent être déplacées vers le haut ou le bas.
Pabouk
Rne fonctionne pas toujours. Voir unix.stackexchange.com/questions/4351/…
wisbucky
5

La touche "F" lors de l'exécution lessfera un "suivi" similaire à tail -f, mais je ne sais pas si cela permettra d'atteindre ce que vous recherchez ici.

Dave Jennings
la source
5

Normalement, je tape simplement Gpour aligner la sortie sur une base ponctuelle. Je trouve cela particulièrement utile sur un système de fichiers réseau tel que CIFS.

Jorb
la source
Il s’agit plutôt d’une actualisation à la demande du fichier ouvert avec moins. En plus de sauter à la fin du fichier, il recharge également le fichier s'il a changé.
Jorb
1
Merci. La première fois, cela ne m'a pas rafraîchi, mais maintenant, cela semble fonctionner correctement. Dans l'homme, ce n'est pas écrit que cela rafraîchit le fichier. man less: 'G ou> ou ESC-> Aller à la ligne N dans le fichier, par défaut la fin du fichier.' Je supprime mes vieux commentaires erronés ici, désolé pour eux.
Commentaires
1
BTW, qu'est-ce que vous appelez une «base ponctuelle»? Le responsable de less, Mark Nudelman, a répondu ce qui suit: "La commande G ne force normalement pas une relecture du fichier comme le fait la commande R. Cela peut sembler le cas si la fin du fichier n’a pas encore été lue lorsque G est appelé, de sorte que tout saut à la fin du fichier doit lire les données à cet endroit pour la première fois. Par exemple, si vous passez à la fin avec G, puis revenez au début avec 1G, un autre programme modifie les données à la fin du fichier (sans changer la longueur), "(suite)
Yaroslav Nikitenko
(suite) "alors vous sautez encore à la fin avec G, vous ne verrez pas les données modifiées. Mais si vous ne sautez pas à la fin et revenez au début, alors la première fois que vous exécutez la commande G, elle doit lire les données y figurent pour la première fois, et bien sûr, toutes les modifications survenues depuis que moins de données ont été invoquées ont été apportées. "
Yaroslav Nikitenko
Dans ce cas, j'ai mentionné qu'il s'agissait d'un rafraîchissement ponctuel par opposition à un rafraîchissement dynamique , ce qui fait partie de la question initiale.
Jorb
1

Vous pouvez utiliser vim pour lire le fichier, puis ajouter le mappage suivant à votre .vimrcfichier et vous pouvez facilement recharger un fichier avec ,r:

let mapleader = ","
nnoremap <leader>r :edit <CR>

Notez que si vous avez déjà modifié le fichier, vim se plaindra. Il suffit de changer pour

let mapleader = ","
nnoremap <leader>r :edit! <CR>

Ignorer les changements.

puk
la source
Ils devront faire levier vimsur vos mains froides et mortes. Le contexte de la question porte sur less, mais en tant que personne aux tendances monomaniaques , je compatis!
Benjamin R
1

Rcar repeindre ne recharge pas toujours le fichier. [1]

Une solution de contournement qui recharge toujours le fichier est d'appuyer sur hq, ce qui ouvrira la page d'aide, puis quittera. Cela a pour effet secondaire de forcer le fichier à recharger.


[1] Voici quelques exemples de situations qui Rrechargent et ne rechargent pas:

  • >et >>changements: NE PAS se recharger
  • sed -i, gEdit, TextEdit: ne soyez pas rechargé
  • Sous Linux, les vichangements: NE PAS recharger
  • Sur Mac, vimodifications: NE PAS faire recharger

Je crois que la différence réside dans le fait que l'inode change (vous pouvez vérifier avec ls -i foo.txt). Si l'inode change, Rcela ne fonctionnera pas.

sage
la source
0

Vous pouvez diriger le message vers tail -f, cela vous obligerait à suivre la sortie. Vous perdriez cependant la possibilité de vous déplacer (faire défiler) votre sortie.

Gert
la source
0

Si vous n'êtes pas opposé à l'utilisation d'un navigateur, vous pouvez lancer le serveur Web Algernon avec cette commande:

algernon -a -t /directory/name

Une liste de fichiers sera ensuite affichée et actualisée automatiquement à l' adresse http: // localhost: 3000 /.

Alexandre
la source
Mauvais fil? ..
Tomasz
Cela semble être une façon de regarder un répertoire, même si c'estless
Jeff Schaller
0

Je viens de trouver ce fil comme n'importe qui. Je voudrais ajouter la solution de quand vous êtes déjà à la fin du fichier, en utilisant 'g' suivi de 'G' forcera un rafraîchissement du fichier.

J'ai fini par créer un bouton de macro pour cela dans mon programme de terminal (SecureCRT). La macro est simplement 'gG'.

ZMitchell
la source