Dane wyjściowe ls(bez argumentów) wydają się oddzielać nazwy plików z podziałem wierszy.
Dowód:
ls | grep foodziała zgodnie z oczekiwaniami,greptraktując każdą nazwę pliku jako osobny wiersz danych wejściowych.ls > files.txt; vim files.txt-> w Vimie, każdy plik znajduje się w osobnej linii
A jednak w terminalu dane wyjściowe lsumieszczają wiele plików w jednym wierszu, oddzielając nazwy plików spacjami, aby uzyskać ładnie wyrównane kolumny:
$ ls
a.txt b.txt c.txt
Więc moje pytanie brzmi: jak to robi?
Czy używa jakiegoś specjalnego znaku kontrolnego do „sfałszowania” nowej linii? Czy może wie, kiedy dane wyjściowe są przesyłane potokowo do innej komendy i w tym przypadku formatuje dane wyjściowe inaczej?
lsużywa do ustalenia, czy wyjście jest terminalemisatty(3).