Comment désactiver les couleurs avec `ls`?

50

Normalement, il est bon d’avoir une sortie couleur de ls, grepetc., etc. Mais si vous ne le souhaitez pas (par exemple, dans un script dans lequel vous dirigez les résultats vers une autre commande), existe-t-il un commutateur capable de le désactiver? ls -Gl’active (avec certaines versions de BSD ls) si ce n’est pas la valeur par défaut, mais ls +Gne le désactive pas. Y at-il autre chose qui va?

iconoclaste
la source
4
En retard, mais pour tous ceux qui recherchent: pour GNU ls et greppour la tuyauterie, vous n'avez rien à faire, car vous --color=autodésactivez déjà la coloration lorsque sa sortie est un tuyau ou, en réalité, autre chose qu'un tty; c'est ce que "auto" signifie. De même, FreeBSD ls -Gou 'CLICOLOR' est 'désactivé si la sortie n'est pas dirigée vers un terminal à moins que ... CLICOLOR_FORCE ...'.
dave_thompson_085

Réponses:

70

La sortie couleur pour lsest généralement activée via un alias dans la plupart des distributions de nos jours.

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

Vous pouvez toujours désactiver temporairement un alias en le préfixant avec une barre oblique inverse.

$ \ls

Faire ce qui précède va court-circuiter le pseudonyme uniquement pour cette invocation. Vous pouvez l'utiliser quand vous voulez désactiver n'importe quel alias.

slm
la source
3
Vous pouvez également utiliser command ls, bien sûr, mais c'est un peu plus rapide.
iconoclast
Astuce! Je dois mettre à jour les scripts pour avoir ``.
Viet
1
J'ai adoré les \ ls
Alex Angelico
27

Avec GNU ls, vous pouvez spécifier ls --color=neverde désactiver explicitement la sortie couleur. (Même si vous en avez un alias ls='ls --color=auto', lorsque vous l'exécutez ls --color=never, il sera étendu à ls --color=auto --color=never, et l'option ultérieure aura la priorité.)

200_success
la source
1
C’est vraiment la réponse que je cherchais, mais je garderai la réponse choisie par slm car elle gère les cas de versions non GNU, telles que les versions dérivées de BSD (OS X, Solaris et * BSD bien sûr).
iconoclaste
3

Vous pouvez aussi simplement utiliser (comme sous DOS):

dir

Il montrera les résultats sans couleur, vous pouvez ajouter les mêmes arguments à ls, comme -l.

esilence
la source
2
alias ls=ls

ou

unalias ls

Cela désactive définitivement les coloriages.

Slyx
la source
3
Bien sûr, cela revient un peu à tuer une mouche avec un fusil de chasse: vous perdez toutes les autres options que vous aviez ajoutées aux lsalias, et vous les perdez pour toute la session, au lieu d’une simple commande.
iconoclaste
C'est pourquoi j'ai dit "en permanence" :-)
Slyx
2

Dans de nombreuses distributions Linux, ceci est activé par défaut chez les utilisateurs .bashrc.

Editez ~/.bashrcet supprimez la ligne qui ressemble à:

alias ls='ls --color=auto'

Si vous souhaitez désactiver cette fonctionnalité pour tous les nouveaux comptes générés sur cette machine à l'avenir, supprimez la même ligne à partir de:

/etc/skel/.bashrc 
James Aanderson
la source
1

Sur Centos7, cela est défini dans /etc/profile.d/colorls.sh... les 3 dernières lignes de ce script sont:

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 vous avez le désir et les autorisations ... commentez la ligne indésirable devrait faire l'affaire.

James Gawron
la source
Ou unalias ls ll len vous .bashrcsi vous n'avez pas les autorisations
nécessaires
0

Pour désactiver la couleur: unalias ls

Pour activer la couleur: alias ls = 'ls --color = auto'

Pour désactiver temporairement la couleur: \ ls -ltr

Ravichandran K
la source
0

Il se peut qu'il se passe autre chose. lsne devrait pas utiliser de couleurs à moins de penser qu'il est connecté à quelque chose d'interactif. Il ne faut pas colorer les choses lorsque vous passez à un autre programme.

Un alias est généralement une mauvaise idée car vous ne pouvez jamais vous débarrasser de cette option et vous habituer à des paramètres personnels que vous ne pourrez peut-être pas utiliser avec une autre machine sur laquelle vous devez travailler. Si vous avez besoin de l'éteindre pour le diriger vers quelque chose d'autre, utilisez le commutateur dans ce tuyau. Mais, les couleurs ne devraient pas être là dans un tuyau.

Car ls, voyez si le vôtre supporte la LS_COLORSvariable d’environnement. Le trapd00r / LS_COLORS vous montre comment cela fonctionne. dircolors vous permet de régler les couleurs de manière minutieuse et par type de fichier. Si vous ne définissez pas, LS_COLORSmais que la coloration est activée, lseffectuera un grand nombre d'appels système pour déterminer les types de fichier et les attributs afin de déterminer le type de couleur à colorer. Les personnes derrière Sherlock ont ​​découvert que ce réglage LS_COLORSpouvait éviter tout cela et donner une vitesse 40 fois supérieure . Lisez leurs détails sanglants pour voir ce qu'ils ont trouvé.

Je fais en sorte que tous les types de fichiers utilisent les couleurs par défaut:

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

Voici le fichier LS_COLORS que j'ai fourni à 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

Pour grep, voyez si le vôtre supporte GREP_COLORSou GREP_OPTIONS.

brian d foy
la source
Notez que cela crée toujours des lsséquences d'échappement de sortie GNU pour les couleurs choisies. Comparez la sortie de ls --color=always | od -aavec celle de ls --color=never | od -aavec ce réglage de LS_COLORS.
Kusalananda
Le vrai truc, c'est de ls | od -ane pas émettre de fuites, et c'est ce que je veux. Le lsdoit uniquement émettre ces séquences lorsqu'il envoie la sortie à un terminal. Si vous le lui dites, cependant, c'est sûr que ça va le faire. Alors ne fais pas ça.
brian d foy
-1

En ajoutant la réponse de @ brian-d-foy, la plupart du temps, il y a une simple couleur gênante qui vous permet de changer d'instance le bleu invisible du répertoire ou le vert flashy de "OTHER_WRITABLE", nous allons donc utiliser notre 24- affichage de bits :)

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

redéfinir uniquement la couleur du répertoire et sa couleur en écriture

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

en savoir plus sur le code ANSI

Iggy Lake
la source
1
La question qui nous occupe concerne la suppression de toutes les couleurs de la sortie de GNU ls, et non la modification des couleurs individuelles.
Kusalananda
ok, que diriez-vous de "désactiver une couleur avec" ls "avec: export LS_COLORS = 'ow = 00' pour désactiver uniquement le OTHER_WRITABLE.
Iggy Lake