Como desativar a cor com `ls`?

50

Normalmente, é bom ter saída de cores de ls, grepetc. Mas quando você não deseja (como em um script em que você direciona os resultados para outro comando), existe uma opção que pode desativá-la? ls -Gativa (com algumas versões derivadas do BSD ls) se não for o padrão, mas ls +Gnão o desativa. Existe mais alguma coisa que vai?

iconoclasta
fonte
4
Tarde, mas para quem procura: pelo GNU ls e grepao canalizar, você não precisa fazer nada, porque --color=autojá desativa a coloração quando sua saída é um tubo ou, na verdade, qualquer coisa, menos um tty; isso é o que 'auto' significa. Da mesma forma, o FreeBSD ls -Gou 'CLICOLOR' é 'desativado se a saída não for direcionada para um terminal, a menos que ... CLICOLOR_FORCE ...'.
Dave_thompson_085

Respostas:

70

A saída de cores lsnormalmente é ativada por meio de um alias na maioria das distros atualmente.

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

Você sempre pode desativar temporariamente um alias, prefixando-o com uma barra invertida.

$ \ls

Se você fizer o procedimento acima, haverá um curto-circuito no alias apenas para esta chamada. Você pode usá-lo sempre que desejar desativar qualquer alias.

slm
fonte
3
Você também pode usar command ls, é claro, mas isso é um pouco mais rápido.
Iconoclast
Truque puro! Preciso atualizar os scripts para ter o ``.
Viet
11
Eu amei o \ ls
Alex Angelico
27

Com o GNU ls, você pode especificar ls --color=neverpara desativar explicitamente a saída em cores. (Mesmo se você tiver um alias ls='ls --color=auto', quando executar ls --color=never, ele será expandido para ls --color=auto --color=nevere a opção posterior terá precedência.)

200_success
fonte
11
Esta é realmente a resposta que eu estava procurando, mas manterei a resposta do slm como a escolhida, pois lida com casos de LSs não-GNU, como versões derivadas do BSD (OS X, Solaris e, é claro, * BSD).
Iconoclast
3

Você também pode simplesmente usar (como no DOS):

dir

Ele mostrará os resultados sem cor, você pode adicionar os mesmos argumentos ls, como -l.

esilência
fonte
2
alias ls=ls

ou

unalias ls

Isso desativa permanentemente os corantes.

Slyx
fonte
3
Claro que isso é um pouco como matar uma mosca com uma espingarda: você perde todas as outras opções adicionadas aos lspseudônimos e as perde por toda a sessão, em vez de apenas um único comando.
Iconoclast
É por isso que eu disse "permanentemente" :-)
Slyx 07/08/15
2

Em muitas distribuições Linux, isso é ativado por padrão nos usuários .bashrc.

Edite ~/.bashrce remova a linha que se parece com:

alias ls='ls --color=auto'

Se você deseja desativar esse recurso para todas as novas contas geradas nesta máquina no futuro, remova a mesma linha de:

/etc/skel/.bashrc 
James Aanderson
fonte
1

No Centos7, isso está sendo definido em /etc/profile.d/colorls.sh... as 3 últimas linhas deste script são:

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 você tiver o desejo e as permissões ... comentar a linha indesejada deve fazer o truque.

James Gawron
fonte
Ou unalias ls ll ldentro de você, .bashrcse você não tiver permissões
avsej
0

Para desativar a cor: unalias ls

Para ativar a cor: alias ls = 'ls --color = auto'

Para desativar temporariamente a cor: \ ls -ltr

Ravichandran K
fonte
0

Pode haver algo mais acontecendo. lsnão deve usar cores, a menos que pense estar conectado a algo interativo. Não deve colorir as coisas quando você canaliza para outro programa.

Um alias geralmente é uma má idéia, porque você nunca pode se livrar dessa opção e se acostuma a configurações pessoais que talvez não consiga levar consigo para outra máquina em que você precise trabalhar. Se você precisar desativá-lo para canalizá-lo para outra coisa, use o interruptor desse tubo. Mas, as cores não devem estar lá em um cano.

Para ls, veja se o seu suporta a LS_COLORSvariável de ambiente. O trapd00r / LS_COLORS mostra como isso funciona. dircolors permite ajustar minuciosamente as cores e por tipo de arquivo. Se você não definir, LS_COLORSmas a cor estiver ativada, lsfará várias chamadas do sistema para descobrir os tipos e atributos de arquivo, para que ele possa descobrir o que colorir. As pessoas por trás de Sherlock descobriram que a configuração LS_COLORSpode evitar tudo isso e melhorar a velocidade em 40 vezes . Leia os detalhes sangrentos para ver o que encontraram.

Eu faço todos os tipos de arquivo usarem as cores padrão:

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

Aqui está o arquivo LS_COLORS que eu forneci para os 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 grep, veja se o seu suporta GREP_COLORSou GREP_OPTIONS.

brian d foy
fonte
Observe que isso ainda cria lssequências de escape da saída GNU para as cores escolhidas. Compare a saída de ls --color=always | od -acom a de ls --color=never | od -aesta configuração de LS_COLORS.
Kusalananda
O verdadeiro truque é que ls | od -anão emite as fugas, e é isso que eu quero. Ele lssó deve emitir essas seqüências quando estiver enviando a saída para um terminal. Se você pedir, no entanto, com certeza fará isso. Então não faça isso.
brian d foy 19/03
-1

adicionando a resposta de @ brian-d-foy, na maioria das vezes há uma cor simples e irritante que você gosta de mudar de instância, o azul invisível do diretório ou o verde chamativo de "OTHER_WRITABLE", então vamos usar nosso 24- exibição bit :)

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

redefinir apenas a cor do diretório e sua outra cor gravável

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

leia mais sobre o código ANSI

Lago Iggy
fonte
11
A questão em questão é sobre remover todas as cores da saída do GNU ls, não sobre como alterar cores individuais.
Kusalananda
ok, que tal "desativar uma cor específica com 'ls' com: export LS_COLORS = 'ow = 00' para desativar apenas o OTHER_WRITABLE.
Iggy Lake