+--------------------+ +------+ +----------+
| stdout |·······→| less |——————→| |
| somecommand | +------+ | terminal |
| stderr |——————————————————————→| |
+--------------------+ +----------+
Если somecommand
печатать текст только со стандартной ошибкой, то при запуске somecommand | less
, somecommand
и less
оба отображаются на терминале. Вывод команды на ее stderr не идет less
, он идет на терминал напрямую, так как он не перенаправляется. Сначала выводит somecommand
прокрутки, в то время как less инициализирует и показывает строку подсказки; затем при somecommand
завершении меньше замечает, что его ввод завершен (потому что канал закрыт). Вы можете поэкспериментировать немного: запустить
{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }
и изменения времени ожидания для somecommand
получения результата до или после того, как менее готово и посмотреть, что происходит, когда канал закрыт.
Жиль "ТАК - прекрати быть злым"
источник