lessverifica se stdouté um terminal e se comporta como catquando não é (copia stdin para stdout até EOF).
Esse recurso permite que você escreva scripts ou programas que sempre enviam sua saída (por exemplo, --helpsaída) lessenquanto permitem um redirecionamento fácil para um arquivo. Seria péssimo se some_command --fullhelp > help.txtainda esperasse pela barra de espaço no stdin para folhear o texto, ou algo assim. Alguns comandos (por exemplo man) verificam sua própria saída para decidir se devem enviar sua saída através de um pager ou não. Se você executar man ls > ls.txt, ele nunca chamará o seu $PAGER.
lessO comportamento semelhante a um gato é útil se você esquecer de editá-lo em uma única linha ao adicionar mais estágios a um pipeline também.
lessprecisa descobrir as dimensões do terminal (tamanho da tela, para saber quantas linhas mostrar ao mesmo tempo). O que ioctl(2)ele usa stdoutretornaria ENOTTY em um não terminal, portanto não pode evitar o manuseio do caso não terminal. lessrealmente usa isatty(3)antes de verificar as dimensões do terminal, mas isattyfunciona tentando um ioctl somente de tty e verificando a falta de erro.
Até um paginador simples como more(1)(pelo menos a versão util-linux) possui esse recurso, porque é provavelmente o comportamento mais simples possível de implementar nesse caso.
Observe que quando você tubo algo em less (por exemplo grep foo bar.txt | less), ele não tem que abrir /dev/ttypara a entrada do teclado. (Você pode vê-lo fazer isso com echo foo | strace less).
bash script.sh,bash script.sh | cat,bash script.sh > file, e ver o que saída que você tem.