Как команда less получает стандартный ввод?

Меня просто интересует эта проблема: если я могу использовать что-то вроде «ls -al | less», у less должна быть возможность ожидания ввода со стандартного ввода. Я ожидал, что после запуска команды «less» программа зависнет и будет ждать ввода (вследствие вызова gets() или чего-то в этом роде).

Но почему на самом деле он показал сообщение об ошибке «Отсутствует имя файла («меньше --help» для справки)» end exited?

Спасибо.


person babel92    schedule 28.03.2013    source источник
comment
См. также связанный вопрос stackoverflow. ком/вопросы/1441251/   -  person anatoly techtonik    schedule 06.09.2013


Ответы (3)


Команда less может проверить, связаны ли argc>1 и stdin с файлом (не tty).

person kev    schedule 28.03.2013
comment
Не могли бы вы объяснить, как он проверяет, связан ли стандартный ввод с файлами? Я думаю, это та часть, которую я хочу знать. Спасибо. - person babel92; 28.03.2013
comment
Мы, старожилы C/Unix, помним ошибку новичка, когда выполняли printf между получением ошибки и попыткой преобразовать errno в сообщение, потому что printf делала вызов, чтобы определить, должна ли она выполнять буферизацию строк или нет, так что все ваши errno сказал бы вам, что это ENOTTY (не TTY). - person Paul Tomblin; 28.03.2013

Команда less не предназначена для этого. Когда вы выполняете команду в bash, она сразу отображает всю информацию. Команда less используется для отображения STDOUT команды или содержимого файла по одному экрану за раз.

person Dion Pezzimenti    schedule 28.03.2013

$ ls -al | less
total 16
drwxrwxr-x  4 hdante hdante 4096 Nov 24 17:11 .
drwxr-xr-x 88 hdante hdante 4096 Mar 24 22:14 ..
drwxrwxr-x  2 hdante hdante 4096 Nov 25 01:55 new
drwxrwxr-x  3 hdante hdante 4096 Nov 24 18:27 old
(END)

Оно работает. Что-то не так с вашим меньше. Из менее справочных страниц:

http://www.linuxmanpages.com/man1/less.1.php https://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/less.1.html

Руководство описывает имя файла как необязательное.

Советы по диагностике вашей проблемы:

  • попробуйте псевдоним | grep less, чтобы увидеть, модифицируется ли команда
  • попробуйте установить | grep LESS и проверьте сценарии, запускаемые LESSCLOSE и LESSOPEN.
person hdante    schedule 28.03.2013
comment
Нет, это сообщение об ошибке было результатом менее интенсивной работы. Я не ясно выразился... - person babel92; 28.03.2013