L'output di ls
(senza argomenti) sembra separare i nomi dei file con le interruzioni di riga.
Prova:
ls | grep foo
funziona come previsto,grep
trattando ogni nome di file come una riga di input separata.ls > files.txt; vim files.txt
-> in Vim, ogni file si trova su una riga separata
Eppure nel terminale l'output di ls
mette più file su una riga, separando i nomi dei file con spazi per creare colonne ben allineate:
$ ls
a.txt b.txt c.txt
Quindi la mia domanda è: come fa?
Sta usando un carattere di controllo speciale per "falsificare" una nuova riga? O sa quando il suo output viene reindirizzato a un altro comando e in questo caso formattarlo in modo diverso?
ls
utilizza per determinare se l'uscita è o meno un terminaleisatty(3)
.