¿Cómo desactivar el color con `ls`?

50

Normalmente es bueno tener resultado de color ls, grep, etc, pero cuando no lo desea (como en un guión en el que está canalizando los resultados a otro comando) no es un interruptor que puede apagarlo? ls -Glo activa (con algunas versiones derivadas de BSD ls) si no es el predeterminado, pero ls +Gno lo desactiva. ¿Hay algo más que lo haga?

iconoclasta
fuente
44
Tarde, pero para cualquiera que busque: para GNU ls y grepcuando se canaliza, no necesita hacer nada porque --color=autoya apaga el color cuando su salida es una tubería, o de hecho cualquier cosa menos un tty; eso es lo que significa "auto". De manera similar, FreeBSD ls -Go 'CLICOLOR' está 'deshabilitado si la salida no se dirige a un terminal a menos que ... CLICOLOR_FORCE ...'.
dave_thompson_085

Respuestas:

70

La salida de color para lsnormalmente se habilita a través de un alias en la mayoría de las distribuciones en la actualidad.

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

Siempre puede deshabilitar un alias temporalmente con el prefijo de una barra diagonal inversa.

$ \ls

Hacer lo anterior cortocircuitará el alias solo para esta invocación. Puede usarlo en cualquier momento que desee deshabilitar cualquier alias.

slm
fuente
3
También podría usar command ls, por supuesto, pero esto es un poco más rápido.
iconoclasta el
Truco aseado! Tengo que actualizar las secuencias de comandos para tener ``.
Vie
1
Me encantó el \ ls
Alex Angelico
27

Con GNU ls, puede especificar ls --color=neverdeshabilitar explícitamente la salida de color. (Incluso si tiene un alias ls='ls --color=auto', cuando ejecuta ls --color=never, se expandirá a ls --color=auto --color=never, y la opción posterior tiene prioridad).

200_success
fuente
1
Esta es realmente la respuesta que estaba buscando, pero mantendré la respuesta de slm como la elegida ya que maneja casos de ls no GNU, como las versiones derivadas de BSD (OS X, Solaris y, por supuesto, * BSD).
iconoclasta
3

También puede simplemente usar (como en DOS):

dir

Mostrará los resultados sin color, puede agregar los mismos argumentos a ls, como -l.

esilence
fuente
2
alias ls=ls

o

unalias ls

Esto deshabilita permanentemente los colores.

Slyx
fuente
3
Por supuesto, esto es un poco como matar una mosca con una escopeta: pierde todas las demás opciones que había agregado a los lsalias y las pierde durante toda la sesión, en lugar de solo un comando.
iconoclasta
Es por eso que dije "permanentemente" :-)
Slyx
2

En muchas distribuciones de Linux esto está activado por defecto en los usuarios .bashrc.

Edite ~/.bashrcy elimine la línea que se ve así:

alias ls='ls --color=auto'

Si desea deshabilitar esta función para todas las cuentas nuevas generadas en esta máquina en el futuro, elimine la misma línea de:

/etc/skel/.bashrc 
James Aanderson
fuente
1

En Centos7 esto se está configurando en /etc/profile.d/colorls.sh... las últimas 3 líneas de este script son:

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

Si tiene el deseo y los permisos ... comentar la línea no deseada debería ser el truco.

James Gawron
fuente
O unalias ls ll len ti .bashrcsi no tienes permisos
avsej
0

Para desactivar el color: unalias ls

Para activar el color: alias ls = 'ls --color = auto'

Para deshabilitar temporalmente el color: \ ls -ltr

Ravichandran K
fuente
0

Puede haber algo más sucediendo. lsno debería usar colores a menos que piense que está conectado a algo interactivo. No debería colorear las cosas cuando se canaliza a otro programa.

Un alias generalmente es una mala idea porque nunca puedes deshacerte de esa opción y te acostumbras a configuraciones personales que quizás no puedas llevar contigo a otra máquina en la que tengas que trabajar. Si necesita apagarlo para conectarlo a otra cosa, use el interruptor en esa tubería. Pero, los colores no deberían estar allí en una tubería.

Para lsver si la suya admite la LS_COLORSvariable de entorno. Los trapd00r / LS_COLORS muestra cómo THT obras. dircolors le permite ajustar los colores minuciosamente y por tipo de archivo. Si no configura LS_COLORSpero tiene activada la coloración, lshará un montón de llamadas al sistema para descubrir los tipos de archivo y los atributos para que pueda determinar qué colorear. Las personas detrás de Sherlock descubrieron que la configuración LS_COLORSpuede evitar todo eso y mejorar 40 veces la velocidad . Lea sus detalles sangrientos para ver lo que encontraron.

Hago que todos los tipos de archivos usen los colores predeterminados:

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

Aquí está el archivo LS_COLORS que alimente a 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

Para grepver si el tuyo es compatible GREP_COLORSo GREP_OPTIONS.

brian d foy
fuente
Tenga en cuenta que esto todavía hace que lslas secuencias de escape de salida de GNU para los colores elegidos. Compare la salida de ls --color=always | od -acon la de ls --color=never | od -acon esta configuración de LS_COLORS.
Kusalananda
El verdadero truco es que ls | od -ano emite los escapes, y eso es lo que quiero. El lssolo debería emitir esas secuencias cuando está enviando la salida a un terminal. Sin embargo, si se lo dices, seguro que lo hará. Entonces, no hagas eso.
Brian D Foy
-1

agregando la respuesta de @ brian-d-foy, la mayoría de las veces hay un color simple y molesto que te gusta cambiar, por ejemplo, el azul invisible del directorio o el verde llamativo de "OTHER_WRITABLE", así que usemos nuestro 24- bit display :)

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

para redefinir solo el color del directorio y su color de otra escritura

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

Leer más sobre el código de ANSI

Lago Iggy
fuente
1
La pregunta en cuestión es sobre eliminar todo el color de la salida de GNU ls, no sobre cómo cambiar los colores individuales.
Kusalananda
ok, ¿qué tal "apagar un color en particular con 'ls' con: export LS_COLORS = 'ow = 00' para apagar solo el OTHER_WRITABLE.
Iggy Lake