Docker protokolliert foo | less` ist nicht durchsuchbar oder scrollbar, aber Docker protokolliert foo 2> & 1 | weniger ist

10

Wenn Sie eines von beiden verwenden, erhalten Sie lesbaren Text. Aber nur mit der stderr-Umleitung kann man scrollen oder / somepattern eingeben und Übereinstimmungen erhalten.

Ohne es gibt die Suche "Nichts zu suchen (drücken Sie die EINGABETASTE)" und eine Spalte mit ~.

Zwar sind stderr und stdout nicht gleich, aber warum zeigt weniger sie gleich, bis ich anfange, etwas in weniger zu tun?

Dies ist vielleicht eine seltsame Sache mit mehreren Fenstern, die ich einfach nicht verstehe. Gedanken?

MagicWindow
quelle

Antworten:

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

Wenn somecommanddruckt Text nur Standardfehler, dann , wenn Sie laufen somecommand | less, somecommandund lesssind die Anzeige sowohl auf dem Terminal. Die Ausgabe des Befehls auf seinem stderr wird nicht lessdirekt an das Terminal gesendet, da er nicht umgeleitet wird. Zuerst wird die Ausgabe von somecommandBildlaufvorgängen durch weniger initialisiert und die Eingabeaufforderungszeile angezeigt. Wenn somecommandweniger fertig ist, merkt man, dass die Eingabe abgeschlossen ist (weil das Rohr geschlossen ist). Vielleicht möchten Sie ein bisschen experimentieren: Ausführen

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

und Variationen der Schlafzeiten, um eine somecommandProduktionsleistung zu erzielen, bevor oder nachdem weniger fertig ist, und um zu sehen, was passiert, wenn das Rohr geschlossen ist.

Gilles 'SO - hör auf böse zu sein'
quelle