Wie schalte ich die Farbe mit ls aus?

50

Normalerweise ist es schön , von Farbausgabe zu haben ls, grepetc. Aber wenn Sie nicht wollen , es (wie in einem Skript , in dem Sie die Ergebnisse an einem anderen Befehl sind kochend) gibt es einen Schalter, der es ausschalten kann? ls -GSchaltet es ein (mit einigen BSD-abgeleiteten Versionen von ls), wenn es nicht die Standardeinstellung ist, aber ls +Ges nicht ausschaltet. Gibt es irgendetwas anderes, das das wird?

Bilderstürmer
quelle
4
Spät, aber für alle, die suchen: Für GNU ls und grepbeim Piping müssen Sie nichts tun, da das Coloring --color=autobereits deaktiviert ist, wenn es sich bei der Ausgabe um eine Pipe handelt, oder eigentlich um alles andere als eine Tty. das ist, was "auto" bedeutet. Ebenso ist FreeBSD ls -Goder 'CLICOLOR' 'deaktiviert, wenn die Ausgabe nicht an ein Terminal gerichtet ist, es sei denn ... CLICOLOR_FORCE ...'.
Dave_thompson_085

Antworten:

69

Die lsFarbausgabe für wird heutzutage in den meisten Distributionen normalerweise über einen Alias ​​aktiviert.

$ alias ls
alias ls='ls --color=auto'

Sie können einen Alias ​​jederzeit vorübergehend deaktivieren, indem Sie ihm einen Backslash voranstellen.

$ \ls

Durch Ausführen der obigen Schritte wird der Alias ​​nur für diesen einen Aufruf kurzgeschlossen. Sie können es jederzeit verwenden, wenn Sie einen Alias ​​deaktivieren möchten.

slm
quelle
3
Sie könnten command lsnatürlich auch verwenden , aber dies ist etwas schneller.
Iconoclast
Ordentlicher Trick! Ich muss die Skripte aktualisieren, um führenden `` zu haben.
Viet
1
Ich liebte die \ ls
Alex Angelico
27

Mit GNU lskönnen Sie angeben ls --color=never, dass die Farbausgabe explizit deaktiviert werden soll. (Auch wenn Sie eine haben alias ls='ls --color=auto', wird diese beim Ausführen ls --color=neverauf erweitert ls --color=auto --color=never, und die spätere Option hat Vorrang.)

200_erfolg
quelle
1
Dies ist wirklich die Antwort, nach der ich gesucht habe, aber ich behalte die Antwort von slm als die gewählte, da sie Fälle von Nicht-GNU-ls behandelt, wie BSD-abgeleitete Versionen (OS X, Solaris und natürlich * BSD).
Iconoclast
3

Sie können auch einfach verwenden (wie unter DOS):

dir

Es werden die Ergebnisse ohne Farbe angezeigt, Sie können die Argumente gleich hinzufügen ls, wie -l.

Ruhe
quelle
2
alias ls=ls

oder

unalias ls

Dadurch werden die Färbungen dauerhaft deaktiviert.

Slyx
quelle
3
Dies ist natürlich ein bisschen wie das Töten einer Fliege mit einer Schrotflinte: Sie verlieren alle anderen Optionen, die Sie zu lsAlias hinzugefügt haben , und Sie verlieren sie für die gesamte Sitzung, anstatt nur einen einzigen Befehl.
Iconoclast
Deshalb habe ich "permanent" gesagt :-)
Slyx
2

In vielen Linux-Distributionen ist dies bei den Benutzern standardmäßig aktiviert .bashrc.

Bearbeiten ~/.bashrcund entfernen Sie die Zeile, die wie folgt aussieht:

alias ls='ls --color=auto'

Wenn Sie diese Funktion in Zukunft für alle auf diesem Computer neu erstellten Konten deaktivieren möchten, entfernen Sie dieselbe Zeile aus:

/etc/skel/.bashrc 
James Aanderson
quelle
1

Auf Centos7 wird dies eingestellt in /etc/profile.d/colorls.sh... Die letzten 3 Zeilen dieses Skripts sind:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d .* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

Wenn Sie den Wunsch und die Berechtigungen haben ... sollte das Auskommentieren der unerwünschten Zeile den Trick tun.

James Gawron
quelle
Oder unalias ls ll lin Ihnen, .bashrcwenn Sie keine Berechtigungen haben
avsej
0

So schalten Sie die Farbe aus: unalias ls

So schalten Sie die Farbe ein: alias ls = 'ls --color = auto'

So deaktivieren Sie die Farbe vorübergehend: \ ls -ltr

Ravichandran K
quelle
0

Es könnte noch etwas anderes los sein. lssollte keine Farben verwenden, es sei denn, es glaubt, mit etwas Interaktivem verbunden zu sein. Es sollte die Dinge nicht färben, wenn Sie zu einem anderen Programm weiterleiten.

Ein Alias ​​ist in der Regel eine schlechte Idee, da Sie diese Option nie loswerden können und sich an persönliche Einstellungen gewöhnen, die Sie möglicherweise nicht auf einen anderen Computer übertragen können, an dem Sie arbeiten müssen. Wenn Sie es ausschalten müssen, um es an etwas anderes weiterzuleiten, verwenden Sie den Schalter in dieser Leitung. Aber Farben sollten nicht in einer Pfeife sein.

Überprüfen Sie ls, ob Ihre die LS_COLORSUmgebungsvariable unterstützt . Das trapd00r / LS_COLORS zeigt Ihnen, wie das funktioniert. Mit dircolors können Sie die Farben minutiös und nach Dateityp anpassen. Wenn Sie nicht festlegen, LS_COLORSsondern die Farbgebung aktiviert haben, lswerden eine Reihe von Systemaufrufen ausgeführt, um die Dateitypen und -attribute zu ermitteln, damit ermittelt werden kann, welche Farben verwendet werden sollen. Die Leute hinter Sherlock haben festgestellt, dass die Einstellung LS_COLORSall dies vermeiden und die Geschwindigkeit um das 40-fache verbessern kann . Lesen Sie ihre blutigen Details, um zu sehen, was sie gefunden haben.

Ich lasse alle Dateitypen die Standardfarben verwenden:

$ export LS_COLORS='bd=0:ca=0:cd=0:di=0:do=0:ex=0:pi=0:fi=0:ln=0:mh=0:no=0:or=0:ow=0:sg=0:su=0:so=0:st=0:tw=0:'

Hier ist die LS_COLORS-Datei, die ich Dircolors hinzugefügt habe:

BLK                   0
CAPABILITY            0
CHR                   0
DIR                   0
DOOR                  0
EXEC                  0
FIFO                  0
FILE                  0
LINK                  0
MULTIHARDLINK         0
NORMAL                0
ORPHAN                0
OTHER_WRITABLE        0
SETGID                0
SETUID                0
SOCK                  0
STICKY                0
STICKY_OTHER_WRITABLE 0

Für grep, ob Ihr Träger GREP_COLORSoder GREP_OPTIONS.

Brian D Foy
quelle
Beachten Sie, dass dadurch immer noch GNU- lsAusgabe-Escape-Sequenzen für die ausgewählten Farben erstellt werden. Vergleichen Sie die Ausgabe von ls --color=always | od -amit der von ls --color=never | od -amit dieser Einstellung von LS_COLORS.
Kusalananda
Der wahre Trick ist, dass ls | od -adie Flucht nicht ausgelöst wird, und das ist es, was ich will. Der lssollte diese Sequenzen nur dann ausgeben, wenn er die Ausgabe an ein Terminal sendet. Wenn Sie es aber sagen, ist es sicher, dass es das tun wird. Also mach das nicht.
Brian d Foy
-1

Wenn Sie die Antwort von @ brian-d-foy hinzufügen, gibt es meistens eine einfache ärgerliche Farbe, die Sie mögen, um das unsichtbare Blau des Verzeichnisses oder das auffällige Grün von "OTHER_WRITABLE" zu ändern. Bitanzeige :)

export LS_COLORS='di=04;01;38;5;33:ow=04;01;38;5;33;48;2;60;10;0'

um nur die Verzeichnisfarbe und ihre andere beschreibbare Farbe neu zu definieren

04: underline;
01: bold/brighter;
38;5;33: redifined-blue;
48;2;60;10;0: dark red background

Lesen Sie mehr über den ANSI-Code

Iggy Lake
quelle
1
Bei der vorliegenden Frage geht es darum, alle Farben aus der Ausgabe von GNU zu entfernen lsund nicht darum, wie einzelne Farben geändert werden können.
Kusalananda
ok, wie wäre es mit "eine bestimmte Farbe mit 'ls' ausschalten mit: export LS_COLORS = 'ow = 00' um nur die OTHER_WRITABLE auszuschalten.
Iggy Lake