ls
testa se a saída está indo para um terminal. Se a saída não estiver indo para um terminal, então -1
é o padrão. (Isso pode ser substituído por uma das opções -C
, -m
ou -x
.)
Assim, quando ls
é usado em um pipeline e você não o substituiu por outra opção, ls
usará -1
. Você pode confiar nisso porque esse comportamento é exigido pelo POSIX
Especificação POSIX
POSIX requer -1
como padrão sempre que a saída não estiver indo para um terminal:
The default format shall be to list one entry per line to standard output; the exceptions are to terminals or when one of the -C, -m, or -x options is specified. If the output is to a terminal, the format is implementation-defined.
Essas três opções que substituem o formato padrão de coluna única são:
-C
Write multi-text-column output with entries sorted down the columns, according to the collating sequence. The number of text columns and the column separator characters are unspecified, but should be adapted to the nature of the output device. This option disables long format output.-m
Stream output format; list pathnames across the page, separated by a <comma> character followed by a <space> character. Use a <newline> character as the list terminator and after the separator sequence when there is not room on a line for the next list entry. This option disables long format output.-x
The same as -C, except that the multi-text-column output is produced with entries sorted across, rather than down, the columns. This option disables long format output.
Documentação GNU
De manual do GNU ls :
‘-1’
‘--format=single-column’
List one file per line. This is the default for ls when standard output is not a terminal. See also the -b and -q options to suppress direct output of newline characters within a file name. [Emphasis added]
Exemplos
Vamos criar três arquivos:
$ touch file{1..3}
Quando a saída vai para um terminal, o GNU ls
escolhe usar um formato de várias colunas:
$ ls
file1 file2 file3
Quando a saída vai para um pipeline, a especificação POSIX requer que a coluna única seja o padrão:
$ ls | cat
file1
file2
file3
As três exceções que substituem o comportamento padrão de coluna única são -m
para separados por vírgula, -C
para colunas classificadas como -x
para colunas classificadas em:
$ ls -m | cat
file1, file2, file3
$ ls -C | cat
file1 file2 file3
$ ls -x | cat
file1 file2 file3