Линейная дисциплина не применяется к главному устройству pty, которое представляет собой просто интерфейс для приема или отправки байтов на «общий tty».
Общий tty — это в основном устройство tty (либо /dev/ttyx, либо подчиненное устройство pty )с линейной дисциплиной, которая преобразует байты с другого конца (либо эмулятор терминала ядра, либо главное устройство pty )в определенные сигналы или линию -буфер -редактирование
Это не имеет ничего общего с самим less
. Просто есть два потока вывода :стандартный вывод(stdout
)и стандартный поток ошибок (stderr
). Сообщения об ошибках, как и следовало ожидать, отправляются на stderr
, а обычный вывод — на stdout
. Канал по умолчанию захватывает только stdout
и игнорирует stderr
. Поскольку ошибки поиска находятся в stderr
, они не отправляются в less
, и поэтому похоже, что less
отфильтровывает ошибки.
find
без «действия» применяет действие по умолчанию -print
, которое выводит полное имя файла на стандартный вывод. Ошибки переходят в стандартную ошибку.
Оператор конвейера перенаправляет только стандартный вывод; поэтому на less
отправляются только «правильные» имена файлов, все остальное идет на стандартную ошибку, которая является вашим терминалом.less
также записывает на ваш терминал, так что сначала вы увидите на экране как имена файлов, так и ошибки; но когда вы прокручиваете вверх вless
(или вызываете любое другое действие, которое приводит к обновлению экрана ), ошибки будут перезаписаны обновлениями less
, поскольку less
знает только о вводе, который он видел из Стандартный вывод find
.
Чтобы просмотреть весь вывод в less
,вам также нужно перенаправить стандартную ошибку:
find / -name foo 2>&1 | less
Чтобы полностью игнорировать ошибки, вместо этого перенаправьте их в битовое ведро:
find / -name foo 2>/dev/null | less