lesscomprueba si stdoutes un terminal y se comporta como catcuando no lo es (copia stdin en stdout hasta EOF).
Esta característica le permite escribir secuencias de comandos o programas que siempre envían su salida (por ejemplo, --helpsalida) a la lessvez que permite una fácil redirección a un archivo. Sería un asco si some_command --fullhelp > help.txttodavía esperara la barra espaciadora en stdin para paginar el texto, o algo así. Algunos comandos (por ejemplo man) verifican que su propia salida decida si enviar su salida a través de un localizador o no. Si corres man ls > ls.txt, nunca invoca tu $PAGER.
lessEl comportamiento de gato es útil si olvida editarlo de una sola línea al agregar más etapas a una tubería también.
lessnecesita averiguar las dimensiones del terminal (tamaño de la pantalla, para saber cuántas líneas mostrar a la vez). El ioctl(2)que usa stdoutdevolvería ENOTTY en un no terminal, por lo que no puede evitar manejar el caso no terminal de todos modos. lessen realidad se usa isatty(3)antes de verificar las dimensiones del terminal, pero isattyfunciona probando un ioctl solo tty y verificando la falta de error.
Incluso un buscapersonas simple como more(1)(al menos la versión util-linux) tiene esta característica, porque probablemente sea el comportamiento sensato más simple de implementar para ese caso.
Tenga en cuenta que cuando algo tubería en less (por ejemplo grep foo bar.txt | less), se tiene que abrir /dev/ttypara la entrada de teclado. (Puedes verlo hacer esto con echo foo | strace less).
bash script.sh,bash script.sh | cat,bash script.sh > file, y ver lo que la producción que se obtiene.