lessперевіряє, чи stdoutє терміналом, і поводиться так, catяк ні (копіює stdin до stdout до EOF).
Ця функція дозволяє писати сценарії чи програми, які завжди надсилають свої результати (наприклад, --helpвихідні дані), lessодночасно дозволяючи просте перенаправлення до файлу. Це буде смоктати, якби some_command --fullhelp > help.txtвсе-таки чекали, коли пробіл на stdin перегортає текст, або щось таке. Деякі команди (наприклад man) перевіряють, чи є їх власний вихід, щоб вирішити, надсилати свій вихід через пейджер чи ні. Якщо ви біжите man ls > ls.txt, він ніколи не викликає ваш $PAGER.
lessповедінка як котяча корисна, якщо ви забудете відредагувати її з однолінійки, додаючи ще кілька етапів до конвеєра.
lessпотрібно розібрати кінцеві розміри (розмір екрана, щоб знати, скільки рядків показувати одразу). Використання, яке ioctl(2)він використовує stdout, поверне ENOTTY на нетермінальний, так що не може уникнути обробки ненетермінального випадку. lessнасправді використовується isatty(3)до перевірки термінальних розмірів, але isattyпрацює, намагаючись лише tty-ioctl і перевіряє відсутність помилок.
Навіть простий пейджер на зразок more(1)(принаймні версія util-linux) має цю особливість, оскільки це, мабуть, найпростіша розумна поведінка, яку можна реалізувати для цього випадку.
Зауважте, що коли ви щось вставляєте less (наприклад grep foo bar.txt | less), це потрібно відкривати /dev/ttyдля введення з клавіатури. (Ви можете бачити, як це можна зробити echo foo | strace less).
bash script.sh,bash script.sh | cat,bash script.sh > fileі подивитися , що висновок , який ви отримаєте.