Die Ausgabe von ls
(ohne Argumente) scheint Dateinamen durch Zeilenumbrüche zu trennen.
Beweis:
ls | grep foo
Funktioniert wie erwartet, wobeigrep
jeder Dateiname als separate Eingabezeile behandelt wird.ls > files.txt; vim files.txt
-> In Vim befindet sich jede Datei in einer separaten Zeile
Und doch werden bei der Ausgabe von im Terminal ls
mehrere Dateien in einer Zeile abgelegt, wobei die Dateinamen durch Leerzeichen getrennt werden, um gut ausgerichtete Spalten zu erstellen:
$ ls
a.txt b.txt c.txt
Meine Frage ist also, wie macht man das?
Verwenden Sie ein spezielles Steuerzeichen, um eine neue Zeile zu "fälschen"? Oder weiß es, wann seine Ausgabe an einen anderen Befehl weitergeleitet wird, und formatiert seine Ausgabe in diesem Fall anders?
ls
, ob der Ausgang ein Terminal ist oder nichtisatty(3)
.tty -s
dessen Rückgabestatus ausführen und überprüfen.ls
Erkennt es, wenn Sie den Ausgang leiten. Sie können es in der Dokumentation sehen:Wenn Sie möchten, dass jede Datei in der Ausgabe unabhängig von der Pipe-Umleitung in einer separaten Zeile platziert wird, können Sie verwenden
quelle