`Докер логи Foo | less` не доступен для поиска или прокрутки, но `docker logs foo 2> & 1 | меньше

10

Использование любого из них дает читабельный текст. Но только с помощью перенаправления stderr можно прокрутить или набрать / somepattern и получить совпадения.

Без этого поиск дает «Ничего не искать (нажмите RETURN)» и столбец ~.

Учитывая, что stderr и stdout не одно и то же, но почему меньше показывает их одинаково, пока я не начну делать что-то за меньшее?

Это может быть какая-то странная мультиоконная вещь, которую я просто не понимаю. Мысли?

MagicWindow
источник

Ответы:

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

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

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

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

Жиль "ТАК - прекрати быть злым"
источник