O programa ls
usa isatty()
para saber se o fd 1 é um tty ou algo diferente (canal, arquivo, etc…). De man 3 isatty
:
int isatty(int fd);
DESCRIPTION
Theisatty()
function tests whetherfd
is an open file descriptor referring to a terminal
Updade: Linha 1538 em ls.c
do coreutils (revisão do git 43a987e1):
if (isatty (STDOUT_FILENO))
{
format = many_per_line;
/* See description of qmark_funny_chars, above. */
qmark_funny_chars = true;
}
( many_per_line
deve ser autodescritivo.)