`docker se connecte foo | less` ne peut pas être recherché ou fait défiler mais `docker se connecte foo 2> & 1 | moins` est

10

L'utilisation de l'un ou l'autre donne un texte lisible. Mais ce n'est qu'avec la redirection stderr que l'on peut faire défiler ou taper / somepattern et obtenir des correspondances.

Sans cela, la recherche donne "Rien à rechercher (appuyez sur RETOUR)" et une colonne de ~.

Étant donné que stderr et stdout ne sont pas les mêmes, mais pourquoi leur montre-t-il la même chose jusqu'à ce que je commence à faire quelque chose en moins?

C'est peut-être un truc bizarre multi-fenêtres que je ne comprends tout simplement pas. Pensées?

MagicWindow
la source

Réponses:

7
+--------------------+        +------+       +----------+
|             stdout |·······→| less |——————→|          |
| somecommand        |        +------+       | terminal |
|             stderr |——————————————————————→|          |
+--------------------+                       +----------+

Si somecommandimprime le texte à l'erreur standard uniquement, alors lorsque vous exécutez somecommand | less, somecommandet lesssont tous deux affichés sur le terminal. La sortie de la commande sur son stderr ne va pas less, elle va directement au terminal, car elle n'est pas redirigée. Tout d'abord, la sortie des somecommandparchemins tandis que less initialise et affiche sa ligne d'invite; puis quand somecommandtermine moins remarque que son entrée est terminée (car le tuyau est fermé). Vous voudrez peut-être expérimenter un peu: exécutez

{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }

et les variations des temps de sommeil pour avoir somecommandune sortie de production avant ou après que moins soit prêt et pour voir ce qui se passe lorsque le tuyau est fermé.

Gilles 'SO- arrête d'être méchant'
la source