`docker logs foo | менше` не підлягає пошуку або прокручуванню, але `docker logs foo 2> & 1 | менше` є


10

Використання будь-якого з них дає читабельний текст. Але лише за допомогою перенаправлення stderr можна прокручувати або набирати / деякупаттер і отримувати збіги.

Без цього пошук дає "Нічого для пошуку (натисніть RETURN)" та стовпчик ~.

Враховуючи, stderr і stdout - це не те саме, але чому менше показує їм те саме, доки я не почну робити щось менше?

Це, можливо, якась дивна річ із вікнами з кількома вікнами, яку я просто не розумію. Думки?

Відповіді:


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

Якщо somecommandдрукується текст лише до стандартної помилки, тоді, коли ви запустите somecommand | less, somecommandі lessобидва відображаються до терміналу. Вихід команди на її stderr не збирається less, він прямує до терміналу, оскільки він не перенаправлений. Спочатку висновок somecommandпрокручується, тоді як менше ініціалізується та показує його рядок; тоді, коли somecommandзакінчується менше, помічає, що його вхід закінчений (тому що труба закрита). Ви можете трохи експериментувати: запустити

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

і коли є час зміни режиму сну, щоб somecommandотримати вихід до або після того, як менше буде готово, і побачити, що станеться, коли труба закрита.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.