Suivre une pipe en utilisant moins?

25

Peut-il moins suivre (en appuyant sur F) une entrée canalisée (de manière similaire à un fichier)? Pour un fichier en cours d'écriture, la commande

less <file>

suivra le fichier en appuyant sur F.

Mais si j'ai une commande qui envoie directement les tuyaux en moins, comme ceci

command | less

appuyer sur F ne fera rien.

Il semble donc que les tuyaux ne peuvent pas être suivis comme les fichiers? Ou peut-être que cela a à voir avec la commande qui écrit également dans STDERR? L'effet que j'essaie d'obtenir est toujours de voir la dernière sortie de la commande: tout comme garder PageDown enfoncé!

Une remarque connexe vaut pour G (aller à la fin): lorsque vous canalisez directement vers moins, cela ne fonctionnera pas.

haelix
la source

Réponses:

21

Appuyez sur Fou Gfait lessessayer d'atteindre l'entrée EOF. Si l'entrée est un tuyau, se lessbloque jusqu'à ce que le tuyau soit fermé de l'autre côté (et non "ne fait rien").

Pour contourner ce problème, enregistrez la sortie de la commande dans un fichier temporaire en arrière-plan, puis utilisez-la comme entrée pour less:

command > /tmp/x &
less +F /tmp/x; kill %; rm /tmp/x

Il n'y a pas d'option pour le faire lessuniquement; cependant, j'admets que ce serait utile.

mik
la source
Si l'entrée est un tuyau, se lessbloque jusqu'à ce que le tuyau soit fermé de l'autre côté . C'est une sorte de déclaration trompeuse. Ce qui se passe, c'est que moins d'appels readdans un mode de blocage, en attente de nouvelles données ou de la fermeture du canal.
Piotr Dobrogost
3
Après avoir appuyé sur F ou G sur l'entrée du tuyau, lessnon seulement une lecture de blocage est effectuée, mais elle le fait dans une boucle en attente d'EOF. Et un EOF sur un tuyau ne se produit que si son autre côté est fermé.
mik
3
Si lessmettait à jour l'écran dans cette boucle, il n'y aurait pas de problème. Le blocage de la lecture a peu à voir avec ce problème.
mik
1
@Flow ce n'est pas un blocage sur lequel portait la question, mais simplement une attente qui est attendue dans cette situation - une attente pour plus de données dans le fichier lorsque EOF est atteint (ce qui n'arrivera pas pour un tuyau fermé, soit dit en passant), ou pour une interruption pour quitter le mode de suivi
mik
1
@PiotrDobrogost avec lecture bloquée lessne pourrait pas mettre à jour l'écran, s'il n'y a pas de données; lorsque certaines données apparaissent, le blocage de la lecture les renverra et lesspourrait mettre à jour l'écran sans thread séparé
mik
6

Peut-il moins suivre (en appuyant sur F) une entrée canalisée (de manière similaire à un fichier)?

Oui, à partir de la version 474. Cependant, il n'est pas encore mentionné dans les notes de publication d'une version car il reste un problème avec cette fonctionnalité actuellement. Voici un commentaire du mainteneur de moins - Mark Nudelman:

Concernant la commande F sur les tuyaux, elle est également corrigée dans less-474. Au lieu de chercher à EOF, la commande F cherche à la fin de l'entrée tamponnée et commence à y lire. Cependant, il n'est pas vraiment utilisable car lorsque vous appuyez sur CTRL-C pour arrêter la commande F, il tue le processus produisant la sortie. Je ne sais pas comment résoudre ce problème.

Jusqu'à ce que ce problème soit résolu en moins, on peut le contourner en utilisant les fonctionnalités du shell. Voir ma réponse à Existe-t-il un moyen de quitter le mode de suivi «moins» sans arrêter d'autres processus dans le tuyau? question pour plus de détails.

Pour référence, le problème avec F ne fonctionnant pas avec les tuyaux a le numéro de référence 300 dans la liste des bogues connus et est intitulé La commande F ne fonctionne pas sur l'entrée canalisée.


Une remarque connexe vaut pour G (aller à la fin): lorsque vous canalisez directement vers moins, cela ne fonctionnera pas.

Il fonctionne à partir de la version 466. Citant les notes de publication de cette version:

La nouvelle commande ESC-G va à la fin des données actuellement en mémoire tampon dans un canal

Piotr Dobrogost
la source
La commande ESC-G a été introduite dans la version 466, publiée le 23 août 2014.
mik
@mik ressemble alors à une erreur dans les notes de publication de la version 471. Merci, réparé.
Piotr Dobrogost
Pas une erreur, ils listent juste les changements de manière incrémentielle depuis une version stable, la version 458 dans ce cas. Cependant, il n'y a pas de version stable avec la commande ESC-G.
mik
La commande ESC-G est maintenant dans une version stable (481): "16 octobre 2015 less-481 a été publié pour une utilisation générale".
mik
Mise à jour: Concernant la commande F sur les tuyaux, elle est également corrigée dans less-474. Au lieu de chercher à EOF, la commande F cherche à la fin de l'entrée tamponnée et commence à y lire. Cependant, il n'est pas vraiment utilisable car lorsque vous appuyez sur ctrl-C pour arrêter la commande F, il tue le processus produisant la sortie. Je ne sais pas comment résoudre ce problème. - Mark Nudelman, mainteneur de moins
Piotr Dobrogost
2

À partir de la page de manuel less

[Keyboard] COMMANDS [...]

   F      Scroll  forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already
          at the end of the file.  It is a way to monitor the tail of a file which is growing while it is being viewed.  (The  behav‐
          ior is similar to the "tail -f" command.)

donc ça devrait marcher, et ça marche vraiment pour moi.

artistoex
la source
1
Cette commande se comporte différemment lorsqu'elle est utilisée avec un tuyau comme décrit par @mik et n'est clairement pas ce que OP recherche.
Piotr Dobrogost