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 whetherfdis 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.)