`doker loguje foo | less` nie jest przeszukiwalny ani przewijalny, ale `docker loguje foo 2> i 1 | mniej jest


10

Użycie jednego z nich daje czytelny tekst. Ale tylko z przekierowaniem stderr można przewijać lub pisać / somepattern i uzyskiwać dopasowania.

Bez tego wyszukiwanie daje „Nic do wyszukiwania (naciśnij RETURN)” i kolumnę ~.

Biorąc pod uwagę, że stderr i stdout nie są takie same, ale dlaczego mniej pokazuje im to samo, dopóki nie zacznę robić czegoś w mniejszym?

To może jakaś dziwna rzecz z wieloma oknami, której po prostu nie rozumiem. Myśli?

Odpowiedzi:


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

Jeśli somecommanddrukuje tekst do standardowego błędu tylko, następnie po uruchomieniu somecommand | less, somecommandi lesssą zarówno wyświetlanie do terminalu. Dane wyjściowe polecenia na jego stderr nie zmienią się less, lecz trafią bezpośrednio do terminala, ponieważ nie są przekierowywane. Najpierw wyjście somecommandzwojów przez while less inicjuje i pokazuje wiersz zachęty; wtedy, gdy somecommandskończy mniej, zauważy, że wprowadzanie zostało zakończone (ponieważ potok jest zamknięty). Możesz trochę poeksperymentować: uruchom

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

oraz zmiany czasów snu, aby somecommanduzyskać wynik przed lub po mniejszej gotowości, i zobaczyć, co się stanie, gdy rura zostanie zamknięta.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.