less
проверяет, является ли его stdout
терминалом, и ведет себя как cat
, когда это не так (копирует stdin в stdout до EOF).
Эта функция позволяет вам писать сценарии или программы, которые всегда отправляют свой вывод (например, - help
output) через less
, при этом позволяя легко перенаправлять в файл. Было бы отстойно, если бы some_command --fullhelp> help.txt
все еще ждал, пока пробел на стандартном вводе не пролистает текст, или что-то в этом роде. Некоторые команды (например, man
) проверяют свой собственный вывод, чтобы решить, посылать свой вывод через пейджер или нет. Если вы запустите man ls> ls.txt
, он никогда не вызовет ваш $ PAGER
. Кошачье поведение
less
удобно, если вы забыли отредактировать его из однострочника при добавлении дополнительных этапов в конвейер.
less
необходимо выяснить размеры терминала (размер экрана, чтобы знать, сколько строк отображать одновременно). ioctl (2)
, который он использует в stdout
, вернет ENOTTY на нетерминальном устройстве, поэтому в любом случае он не может избежать обработки нетерминального случая. less
фактически использует isatty (3)
перед проверкой размеров терминала, но isatty
работает, пробуя ioctl только для tty и проверяя отсутствие ошибок.
Даже простой пейджер, такой как more (1)
(по крайней мере, версия для util-linux), имеет эту функцию, потому что это, вероятно, простейшее разумное поведение для такого случая.
Обратите внимание, что когда вы передаете что-то в less
(например, grep foo bar.txt | less
), оно должно открывать / dev / tty
для ввода с клавиатуры. (Вы можете увидеть это с помощью echo foo | strace less
).