Wenn ich laufe, ls
erhalte ich eine farbige Ausgabe, die ich ziemlich praktisch finde, um schnell einen Blick auf die Art der Datei zu werfen. Wenn ich versuche, es less
auch mit den -r
und -R
-Flaggen zu pfeifen, geht die Färbung immer verloren. Ich benutze zsh
Version 5.0.7. Irgendwelche Ideen? Vielen Dank.
Bearbeiten: Ich bin auf OS X.
ls
dass mit aufgerufen wird--color
? Versuchen Sie, die Pipeline (^Z
) anzuhalten oderps
von einem anderen Terminal aus zu verwenden. Welche Ausgabewhich ls
produziert?less -r
so dass es kein Problem mit istless
aber mitls
ls
Ergebnis hängt von stdout ab). Der, an den ich mich erinnere, ist unix.stackexchange.com/questions/157285/…, der selbst als Duplikat von unix.stackexchange.com/questions/10421/…ls --color=auto
Farben nur beim Schreiben in ein Terminal verwendet werden (dh wenn die Standardausgabe ein Terminal ist) und nicht, wenn es sich um eine Datei oder eine Pipe handelt.Antworten:
Dies ist beabsichtigt: Programme, die eine farbige Ausgabe erzeugen, tun dies normalerweise nur, wenn ihre Ausgabe an ein Terminal gesendet wird, nicht, wenn sie an eine Pipe oder eine reguläre Datei gesendet wird. Der Grund dafür ist, dass Daten, die auf einem Terminal gesendet werden, vermutlich von einem Menschen gelesen werden, wohingegen Daten, die an ein Programm weitergeleitet oder in eine Datei geschrieben werden, wahrscheinlich von einem Programm analysiert werden, sodass sie keine fremden Inhalte wie farbverändernde Escape-Sequenzen enthalten sollten .
GNU
ls
zeigt eine farbige Ausgabe auf einem Terminal an, wenn Sie die Option--color
(oder--color=auto
) übergeben. Übergeben Sie--color=always
oder--color=yes
(Synonyme), um eine farbige Ausgabe unabhängig vom Dateityp der Standardausgabe zu erzwingen . Dieser Konvention sind andere Befehle gefolgt, wie GNU grep, FreeBSD grepgit diff
usw.Übergeben Sie mit der FreeBSD-Version von
ls
(ebenfalls unter OSX verfügbar und alscolorls
Port unter OpenBSD und NetBSD verfügbar ) die Option-G
, Farben anzuzeigen, wenn die Ausgabe ein Terminal ist. Stellen Sie die Umgebung so einCLICOLOR_FORCE
, dass Farben unabhängig vom Ausgabedateityp angezeigt werden.quelle
Das Problem ist höchstwahrscheinlich, dass Ihr
ls
Programm die Option set hat,--color=auto
was im Grunde bedeutet, dass die Ausgabe nur dann eingefärbt werden sollte, wenn sie an ein Terminal angeschlossen ist. Andernfalls (Ausgabe an eine Pipe oder eine Datei) werden keine Farben ausgegeben.Wenn Sie in solchen Fällen Farben möchten, sollten Sie die
--color
Option auf setzenalways
. Versuchen Sie es alsoWenn Sie dieses Verhalten die ganze Zeit erwarten, erstellen Sie einfach einen Alias:
quelle
ls
kommt nicht vonbash
, es ist ein eigenständiges Programm. Führen Siels --version
den Befehl aus, um die Version zu überprüfen. Meins ist ls GNU coreutils) 8.21 .ls
Version hat die--version
Flagge nicht. Ich verwende die Standardversion von OS X und bin mir nicht sicher, ob das hilft.Ich kann die Antwort von @jimmij nicht kommentieren, da ich weniger als 50 Wiederholungen habe, aber ich möchte erklären, was bei mir in Bash funktioniert hat.
Wenn du läufst
Sie sehen alle Einträge der
man
-Seite für Ihre spezielle Shell-Umgebung (in unserem Fallbash
).Für mich hat die folgende Anpassung den Trick gemacht:
quelle
-G
Flagge hat nichts damit zu tun, wie diels
Farbausgabe verwaltet wird. Dadurch werden nur die Gruppen aus der Ausgabe von entferntls -l
. Es wirkt sich auf die Farbausgabe in BSD ls aus (die auch unter OSX verwendet wird), meinen Sie das? Auf jeden Fall glaube ich nicht, dass dies Farbe zeigt, wenn es in eine Datei umgeleitet wird, sondern nur Farbe in der Befehlszeile.