найти трубу меньше -почему при нажатии клавиши "вверх" остаются только правильные линии?

Линейная дисциплина не применяется к главному устройству pty, которое представляет собой просто интерфейс для приема или отправки байтов на «общий tty».

Общий tty — это в основном устройство tty (либо /dev/ttyx, либо подчиненное устройство pty )с линейной дисциплиной, которая преобразует байты с другого конца (либо эмулятор терминала ядра, либо главное устройство pty )в определенные сигналы или линию -буфер -редактирование

6
17.05.2021, 14:17
2 ответа

Это не имеет ничего общего с самим less. Просто есть два потока вывода :стандартный вывод(stdout)и стандартный поток ошибок (stderr). Сообщения об ошибках, как и следовало ожидать, отправляются на stderr, а обычный вывод — на stdout. Канал по умолчанию захватывает только stdoutи игнорирует stderr. Поскольку ошибки поиска находятся в stderr, они не отправляются в less, и поэтому похоже, что lessотфильтровывает ошибки.

10
28.07.2021, 11:31

findбез «действия» применяет действие по умолчанию -print, которое выводит полное имя файла на стандартный вывод. Ошибки переходят в стандартную ошибку.

Оператор конвейера перенаправляет только стандартный вывод; поэтому на lessотправляются только «правильные» имена файлов, все остальное идет на стандартную ошибку, которая является вашим терминалом.lessтакже записывает на ваш терминал, так что сначала вы увидите на экране как имена файлов, так и ошибки; но когда вы прокручиваете вверх вless(или вызываете любое другое действие, которое приводит к обновлению экрана ), ошибки будут перезаписаны обновлениями less, поскольку lessзнает только о вводе, который он видел из Стандартный вывод find.

Чтобы просмотреть весь вывод в less,вам также нужно перенаправить стандартную ошибку:

find / -name foo 2>&1 | less

Чтобы полностью игнорировать ошибки, вместо этого перенаправьте их в битовое ведро:

find / -name foo 2>/dev/null | less
15
28.07.2021, 11:31

Теги

Похожие вопросы