Come disattivare il colore con `ls`?


50

Normalmente è bello avere un output di colore da ls, grepecc. Ma quando non lo si desidera (come in uno script in cui si esegue il piping dei risultati a un altro comando), esiste un interruttore che può disattivarlo? ls -Glo attiva (con alcune versioni derivate da BSD di ls) se non è il valore predefinito, ma ls +Gnon lo spegne. C'è qualcos'altro che lo farà?


4
In ritardo, ma per tutti coloro che cercano: per GNU ls e grepquando si esegue il piping non è necessario fare nulla perché --color=autodisattiva già la colorazione quando il suo output è una pipe, o in realtà tutt'altro che un tty; questo è ciò che significa "auto". Allo stesso modo FreeBSD ls -Go 'CLICOLOR' è 'disabilitato se l'uscita non è diretta a un terminale a meno che ... CLICOLOR_FORCE ...'.
dave_thompson_085

Risposte:


70

L'output a colori per lsè in genere abilitato attraverso un alias nella maggior parte delle distribuzioni al giorno d'oggi.

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

È sempre possibile disabilitare temporaneamente un alias aggiungendo il prefisso con una barra rovesciata.

$ \ls

Fare quanto sopra metterà in corto circuito l'alias solo per questa invocazione. Puoi usarlo ogni volta che vuoi disabilitare qualsiasi alias.


3
Potresti anche usare command ls, ovviamente, ma questo è un po 'più veloce.
iconoclasta

Trucco pulito! Devo aggiornare gli script per avere il comando ''.
Viet

1
Mi è piaciuto molto
Alex Angelico il

27

Con GNU ls, è possibile specificare ls --color=neverdi disabilitare esplicitamente l'output a colori. (Anche se hai una alias ls='ls --color=auto', quando corri ls --color=never, si espanderà a ls --color=auto --color=nevere l'opzione successiva avrà la precedenza.)


1
Questa è davvero la risposta che stavo cercando, ma manterrò la risposta di slm come quella scelta poiché gestisce i casi di non GNU, come le versioni derivate da BSD (OS X, Solaris e ovviamente * BSD).
iconoclasta

3

Puoi anche semplicemente usare (come su DOS):

dir

Mostrerà i risultati senza colore, puoi aggiungere gli stessi argomenti a ls, come -l.


2
alias ls=ls

o

unalias ls

Questo disabilita permanentemente i coloranti.


3
Ovviamente è un po 'come uccidere una mosca con un fucile: perdi tutte le altre opzioni che hai aggiunto agli lsalias e le perdi per l'intera sessione, invece di un solo comando.
iconoclasta

Ecco perché ho detto "permanentemente" :-)
Slyx il

2

In molte distribuzioni Linux questo è attivato per impostazione predefinita negli utenti .bashrc.

Modifica ~/.bashrce rimuovi la linea simile a:

alias ls='ls --color=auto'

Se si desidera disabilitare questa funzione per tutti i nuovi account generati su questa macchina in futuro, rimuovere la stessa riga da:

/etc/skel/.bashrc 

1

Su Centos7 questo è stato impostato in /etc/profile.d/colorls.sh... ultime 3 righe di questo script sono:

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

Se hai il desiderio e le autorizzazioni ... commentare la riga indesiderata dovrebbe fare il trucco.


O unalias ls ll lin te .bashrcse non hai i permessi
avsej

0

Per disattivare il colore: unalias ls

Per attivare il colore: alias ls = 'ls --color = auto'

Per disabilitare temporaneamente il colore: \ ls -ltr


0

Potrebbe esserci qualcos'altro in corso. lsnon dovrebbe usare i colori se non pensa che sia connesso a qualcosa di interattivo. Non dovrebbe colorare le cose quando si esegue il pipe ad un altro programma.

Un alias è generalmente una cattiva idea perché non puoi mai sbarazzarti di quell'opzione e ti abitui alle impostazioni personali che potresti non essere in grado di portare con te su qualche altra macchina su cui devi lavorare. Se è necessario disattivarlo per collegarlo a qualcos'altro, utilizzare l'interruttore in tale tubo. Ma i colori non dovrebbero essere lì in una pipa.

Per ls, vedi se il tuo supporta la LS_COLORSvariabile d'ambiente. I trapd00r / LS_COLORS mostra come tht funziona. dircolors ti consente di regolare i colori minuziosamente e per tipo di file. Se non imposti LS_COLORSma hai attivato la colorazione, lseffettuerai un sacco di chiamate di sistema per capire i tipi di file e gli attributi in modo da poter capire cosa colorare le cose. Le persone dietro Sherlock hanno scoperto che l'impostazione LS_COLORSpuò evitare tutto ciò e dare un miglioramento della velocità di 40 volte . Leggi i loro dettagli cruenti per vedere cosa hanno trovato.

Faccio in modo che tutti i tipi di file utilizzino i colori predefiniti:

$ 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:'

Ecco il file LS_COLORS che ho inviato ai dircolors:

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

Per grep, vedi se il tuo supporta GREP_COLORSo GREP_OPTIONS.


Si noti che ciò rende ancora lssequenze di escape dell'output GNU per i colori scelti. Confronta l'output di ls --color=always | od -acon quello di ls --color=never | od -acon questa impostazione di LS_COLORS.
Kusalananda

Il vero trucco è che ls | od -anon emette le fughe, ed è quello che voglio. L' lsdovrebbero emettere solo quelle sequenze quando è inviare l'uscita a un terminale. Se lo dici a, però, sicuramente lo farà. Quindi, non farlo.
brian d foy,

-1

aggiungendo la risposta di @ brian-d-foy, il più delle volte c'è un semplice colore fastidioso che ti piace cambiare ad esempio il blu invisibile della directory o il verde lampeggiante di "OTHER_WRITABLE", quindi usiamo il nostro 24- visualizzazione bit :)

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

ridefinire solo il colore della directory e il suo colore scrivibile altro

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

leggi di più sul codice de ANSI


1
La domanda attuale è sulla rimozione di tutto il colore dall'output di GNU ls, non su come cambiare i singoli colori.
Kusalananda

ok, che ne dici di "disattivare un colore particolare con 'ls' con: export LS_COLORS = 'ow = 00' per disattivare solo il OTHER_WRITABLE.
Iggy Lake
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.