Passo a maior parte do tempo trabalhando em ambientes Unix e usando emuladores de terminal. Eu tento usar cores na linha de comando, porque as cores tornam a saída mais útil e intuitiva.
Quais opções existem para adicionar cor ao meu ambiente de terminal? Que truques você usa? Que armadilhas você encontrou?
Infelizmente, o suporte para cores varia dependendo do tipo de terminal, sistema operacional, configuração TERM, utilidade, implementações de bugs, etc.
Aqui estão algumas dicas da minha configuração, depois de muita experimentação:
- Costumo definir
TERM=xterm-color
, que é suportado na maioria dos hosts (mas não em todos). - Trabalho em vários hosts diferentes, diferentes versões de SO, etc. Uso tudo, desde macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux e FreeBSD. Estou tentando manter as coisas simples e genéricas, se possível.
- Eu faço um monte de trabalho usando o GNU
screen
, o que adiciona outra camada de diversão. - Muitos sistemas operacionais definem coisas como
dircolors
e por padrão, e não quero modificar isso em centenas de hosts diferentes. Então, eu tento manter os padrões. Em vez disso, ajusto a configuração de cores do meu terminal. Use cores para alguns comandos Unix (
ls
,grep
,less
,vim
) eo prompt do bash . Esses comandos parecem usar as " sequências de escape ANSI " padrão . Por exemplo:alias less='less --RAW-CONTROL-CHARS' export LS_OPTS='--color=auto' alias ls='ls ${LS_OPTS}'
Vou postar minha .bashrc
e responder minha própria pergunta Jeopardy Style.
column -t --color
?Respostas:
Aqui estão algumas coisas que você pode fazer:
Editores + Código
Muitos editores têm suporte a destaque de sintaxe.
vim
eemacs
tê-lo ativado por padrão. Você também pode habilitá-lo emnano
.Você também pode sintonizar o código de destaque no terminal usando Pygments como uma ferramenta de linha de comando.
grep
grep --color=auto
destaca todos os jogos. Você também pode usarexport GREP_OPTIONS='--color=auto'
para torná-lo persistente sem um alias. Se você usar--color=always
, ele usará cores mesmo quando estiver em tubulação , o que confunde as coisas.ls
ls --color=always
Cores especificadas por:
(dica:
dircolors
pode ser útil)PS1
Você pode definir seu PS1 (prompt de shell) para usar cores. Por exemplo:
Produzirá um PS1 como:
lucas @ ubuntu: [vermelho] ~ [normal] $
Você pode ser realmente criativo com isso. Como uma ideia:
Coloca uma barra na parte superior do seu terminal com algumas informações aleatórias. (Para obter melhores resultados, use também
alias clear="echo -e '\e[2J\n\n'"
.)Livrar-se das seqüências de escape
Se algo está travando na saída de cores quando você não deseja, eu uso esta
sed
linha para remover as seqüências de escape:Se você deseja uma experiência mais autêntica, também pode se livrar das linhas que começam com
\e[8m
, o que instrui o terminal a ocultar o texto. (Não é amplamente suportado.)Observe também que esses ^ [s devem ser reais, literais ^ [s. Pode introduzi-los pressionando ^ V ^ [em bash, que é Ctrl+ V, Ctrl+ [.
fonte
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
. Existe um x supérfluo após a quarta barra invertida.\[...\]
ou os comandos na segunda linha sobrescreverão a primeira linha. PS1 = '[\ e [33; 1m] \ u @ \ h: [\ e [31m] \ W \ e [0m \ $'ls --color=always
não funciona. A abordagem de @ Michael Durrant é melhor para isso:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Eu também uso:
E se você gosta de colorir seu prompt, os vars de cores definidos podem ser úteis:
E então meu prompt é algo como isto:
$ (vcprompt) está chamando um script python no meu ~ / sbin que imprime informações de controle de versão sobre o caminho atual. Inclui suporte para Mercurial, Git, Svn, Cvs, etc. O autor do script tem a fonte aqui .
Esta é a fonte completa da minha configuração de prompt:
fonte
$LSCOLORS
e$CLICOLOR
são para BSD ls. O GNU ls (Linux) usa$LS_COLORS
com uma sintaxe diferente. Como o GNU se sente em casa, euLSCOLORS=exgxfxDacxBaBaCaCaeaEa
costumo imitar as cores do GNU no BSD.grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
.bashrc
arquivo para que a modificação seja efetiva. Você pode fazer isso com o seguinte comando.source /path/to/.bashrc
grep
els
já foram mencionados, se você quiser muito mais cores confira Coloriser genérico , o seu objectivo inicial era para colorir os arquivos de log, mas a direita fora da caixa também tenta colorirping
,traceroute
,gcc
,make
,netstat
,diff
,last
,ldap
, ecvs
.É facilmente estendido se você conhece expressões regulares. Adicionei
ps
enmap
à lista (se você entrargrc
, ficarei feliz em compartilhar os arquivos .conf dessas duas ferramentas)(Btw, para instalá-lo via
synaptic
,pacman
e, da mesma forma que você pode ter melhor sorte em busca de "grc")fonte
grc
agora suportaps
por padrão. Eu estaria interessado em seusnmap
corantes. Veja também minha resposta para criar um alias de todos eles de uma maneira que absorverá novos comandos quando você atualizar o grc.Eu aprimorei meu .bashrc ao longo dos anos para trabalhar no OSX e no Ubuntu.
Também reduzi o tamanho para 28 linhas com instruções de condição compactas.
Com isso, meu prompt do PS1 se parece com:
com tempo em vermelho, nome de usuário em verde, nome da máquina em azul claro, pwd em azul mais escuro e ramo git em amarelo.
Recurso do meu prompt do PS1:
_
entre eles (essa é apwd sed
parte de LOCATION).As linhas relevantes do meu
.bashrc
arquivo são:Para sl com cores quando disponíveis e sem erros quando não (por exemplo, OSX):
fonte
ls
no OS X, mas são feitas usandoexport CLICOLOR=1
.ls
no MacOS 10. A resposta também é errônea, pois as seqüências de caracteres aqui são de fato defeituosas. Eles não equilibrar corretamente\[
e\]
, e tem causado problemas para pelo menos uma pessoa copiar esta resposta .Cores para páginas de manual ( mais detalhes ):
Cores para grep (
1;32
é verde brilhante, veja outras postagens aqui para outras cores):Mais cores para o GNU ls :
Instale
grc
( Colouriser genérico ) e adicione-o aos seus aliases:Cores para diff : muito conteúdo para uma função, use um script e o alias no seu arquivo rc (desnecessário se você instalou
grc
):Cores para o prompt do bash :
fonte
PSWD()
função costumava ser compatível com POSIX, mas é muito mais fácil facilitada usando o manuseio de substring bash / zsh. Consulte a revisão 6 para a versão POSIX, que envolve muitos pontos de interrogação e não era adaptável à largura do terminal. Não atualizei a captura de tela, mas é apenas uma pequena alteração na largura de 80 caracteres.CLICOLOR=1
não funciona para mim com o FreeBSD 11.2CLICOLOR=1 ls
deve fazer o mesmo quels -G
usar BSD (ls -g
em BSDs mais antigos). Sels --color
funcionar (sem erro), você está usando ols
comando do GNU e$CLICOLOR
é ignorado.~/.bashrc
para que quaisquer alterações tenham efeito. Executesource ~/.bashrc
ou inicie uma nova sessão do bash (inicie um terminal ou executebash
).Defina um prompt em negrito / colorido. Do cyberciti.biz e do BashFAQ
Também consegui encontrar configurações de cores que são amplamente suportadas e que não imprimem caracteres desagradáveis em ambientes mais antigos (até mesmo no FreeBSD4!), E parecem funcionar bem se TERM = vt100, xterm, xterm-color. (Em geral). Do meu .bashrc:
fonte
Existe uma boa ferramenta para configurar suas cores para o comando ls - http://geoff.greer.fm/lscolors/
fonte
Coisas que ainda não foram ditas aqui:
Para colorir a saída de suas compilações com o gcc, há o colorgcc de Johannes Schlüter
Para colorir logs, há multitail
Para colorir qualquer stdout, montei xcol
Eu pessoalmente os uso da ferramenta xcol.
Eu uso essas variáveis nos meus scripts assim
Também gosto desta pequena função coloredEcho (encontrada no Stack Overflow)
Desculpe, não é permitido postar mais links
fonte
Eu sugiro que você verifique o ZSH e seu plugin oh-my-zsh, que possui um dos recursos mais poderosos do console que eu vi. Um deles é escolher o tema para o seu terminal. Este é um exemplo do meu tema ... Em tty, as cores não são tão quentes, mas são as mesmas da foto ... De qualquer maneira, você vai adorar!
fonte
emulate bash
no. arquivos. Para quem trabalha com recursos avançados no BASH, existem muitas sutilezas que o morderão. BASH é um sh melhor.=~
operador pode morder você, a maneira como o ZSH lida com matrizes pode morder você, etc. Depois de usar o ZSH / Oh-My-ZSH por cerca de 9 meses, eu já tive o suficiente. Eu estava usando um tema personalizado que eu mesmo escrevi, o enviei para o BASH e escrevi minha própria linha de prompt do git e nunca mais olhei para trás. Agora já não se preocupar com a portabilidadePara visualizar a saída diferencial em cores, use colordiff .
Canalize qualquer saída no formato diff para o colordiff:
Isso inclui alguns dos formatos alternativos do diff, como
-y
(lado a lado).Como alternativa, se invocado de forma independente (sem nada canalizado), ele atua como um invólucro em torno de 'diff' e colore a saída. Portanto, eu tenho isso no meu .bashrc, também conhecido como 'diff' para colordiff.
fonte
.bashrc
exemplo está ausente no finalfi
e pode ser convertido em um comando de linha única:type colordiff &> /dev/null && alias diff='colordiff'
Alguma decoração de texto (negrito) para diferenciar facilmente entre shell raiz e não raiz. Para Zsh:
Para Bash:
fonte
bash
.Eu apenas me perguntei a mesma coisa. Eu tenho minha própria abordagem, mas estou procurando alternativas.
Eu escrevo wrappers bash em torno de chamadas de programa e canalizo sua saída embora
sed
. O que eu gostosed
é que ele modificará e ecoará cada linha imediatamente => sem muito buffer. No entanto, não gosto que, para cada chamada para um programa agrupado, osed
código seja analisado e compilado.Por exemplo, é isso que faço para colorir a saída de
ip
:fonte
Para definir o prompt, eu tenho isso no meu arquivo .bashrc.
Isso me dá um prompt que se parece com isso:
O diretório de trabalho está em verde. E o nome do usuário está em negrito e ciano, a menos que eu tenha executado o shell
sudo
; nesse caso, o nome do usuário ("root") exibe negrito e vermelho.Pessoalmente, gosto muito de ter os caracteres de controle de formatação armazenados em variáveis, pois facilita a leitura do código para definir o prompt. Ele também faz a edição do prompt de muito mais fácil.
O motivo pelo qual uso
tput
é que ele deve ser mais universalmente suportado do que as033[01;31m\]
sequências estranhas . Além disso, como um bônus adicional, se você fizer issoecho $PS1
no prompt, verá o prompt bruto com cores em vez daquelas seqüências de controle ininteligíveis.fonte
Você pode tentar um projeto que também ajude a colorir os scripts de saída, chamado ScriptEchoColor no source forge: http://scriptechocolor.sourceforge.net/
ex.:
As cores automáticas são configuráveis.
Este é um exemplo feito com ele:
fonte
Uma ótima ferramenta Python de uso geral para colorir a saída de comandos é ' colout '
Você fornece um regex com N grupos, seguido por uma lista separada por vírgulas de N cores. Qualquer texto que corresponda a um grupo será exibido na cor correspondente.
Então, por exemplo, se você estiver vendo alguma saída de teste:
então você pode enfeitar com:
Veja como minha regex tem três grupos (parênteses) seguidos por três cores (e opcionalmente três estilos), mas usei uma abreviação para definir todas as cores para 'negrito', para o grupo 'preto', que corresponde ao texto entre colchetes , sai como cinza escuro.)
Observe também como eu tive que adicionar
2>&1
ao final da invocação do Python, porque a saída do unittest está no stderr, então eu a transferi para o stdout para que eu possa canalizá-lo para o colout.Geralmente, é tão fácil de usar que, muitas vezes, me pego criando novas invocações de colout on-the-fly e reutilizando ou modificando-as no meu histórico de linha de comando.
A única desvantagem disso é que ele vem como um pacote Python, não como um executável independente, então você precisa instalá-lo usando o pip, ou
sudo python setup.py install
.fonte
Acho Solarized útil. É um projeto elegante, com cores uniformes para muitas aplicações.
http://ethanschoonover.com/solarized https://github.com/altercation/solarized
fonte
Eu uso o invólucro colorido .
É quase perfeito, mas depois que descobri que o ps no shell interativo retorna uma saída diferente comparando o ps em um pipe.
fonte
Para Mac, você pode usar o seguinte, conforme especificado aqui
fonte
se você quiser deixar o seu
vim
colorido igual a mim, sugiro que você siga duas etapas:fonte
Se bash é sua escolha, recomendo oh-my-bash . Se zsh é sua escolha, recomendo oh-my-zsh . Ambos suportam a colorização do seu terminal e saída diferente.
fonte
Eu gostaria de anunciar humildemente a minha recente publicação de
ta
ou textattr , uma ferramenta de biblioteca e de linha de comando que tem o objetivo de fazer a cor adicionando e atributos para embelezar a saída do terminal do seu programa mais fácil de traduzir especificações legíveis em códigos de escape ANSI.Por exemplo:
echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"
ou ainda mais curto:
echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"
ou uma alternativa:
tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"
lhe dará algo como:
Atualmente, esta biblioteca é utilizável em quatro idiomas C, C ++, D e Python, além do uso da linha de comando do seu shell favorito.
Observe que ele não colore automaticamente a saída de outros programas. É um utilitário que ajuda você a não ter que se lembrar dos códigos abstrusos. Você só precisa usar os nomes óbvios das cores ou suas abreviações rgb cmyk w (hite) (of) f .
Para mais detalhes, visite o repositório textattr .
fonte