Woher ls
wissen Befehle wie , was ihre Standardausgabe ist?
Es scheint ls
unterschiedlich zu funktionieren, je nachdem, was das Ziel-Standard ist. Zum Beispiel, wenn ich:
ls /home/matt/tmp
Das Ergebnis ist:
a.txt b.txt c.txt
Wenn ich es aber tue
ls /home/matt/tmp | cat
Das Ergebnis ist (dh neue Zeile pro Ergebnis):
a.txt
b.txt
c.txt
Dem Prozess wird ein Dateideskriptor 1 für stdout übergeben, oder? Wie wird festgelegt, wie das Ergebnis formatiert wird? Zeigt der Dateideskriptor Informationen an?
command-line
io-redirection
ls
tty
Mâtt Frëëman
quelle
quelle
Antworten:
Das
ls
Programm verwendet, umisatty()
zu wissen, ob fd 1 ein tty oder etwas anderes ist (Pipe, Datei usw.). Vonman 3 isatty
:Aktualisierung: Zeile 1538 in
ls.c
von Coreutils (Git Revision 43a987e1):(
many_per_line
sollte selbstbeschreibend sein.)quelle
Keine genaue Antwort, sondern ein Beispiel. In einem Bash-Skript können Sie mit
test
/[[
's einen ähnlichen Effekt erzielen-t
:Verwenden Sie es so:
quelle
Aus dem OpenBSD-
ls(1)
Handbuch :Dann später:
[...]
quelle
Sie können
ls
in einem Pseudo-Terminal mit demscript
Befehl ausführen , die Ausgabe anls
einen anderen Befehl weiterleiten und das gleiche Ausgabeformat erhalten, als ob es keine solche Weiterleitung des stdout-Streams gäbe, dh als ob stdout ein Terminal (tty) wäre.Für den zugrunde liegenden
isatty()
Mechanismus bereits von Stéphane Gimenez sehen hingewiesen ls.c .quelle