Autor: NatuNobilis
eMail: natunobilis[NOSPAM]gentoobr.org
Data: 3 de janeiro de 2004
Você já viu como é colorido o console padrão do Gentoo Linux? Ficou com inveja?
Então vamos ver como deixar o seu prompt do bash totalmente colorido.
Primeiro você deve descobrir qual arquivo governa a configuração do seu bash.
Em algumas distribuições é o /etc/bashrc, em outras é o /etc/profile. Você pode descobrir isso com o comando:
% grep "export PS1" /etc/*
E se esse comando não retornar nada, use o (mais demorado):
% grep "export PS1" /etc/* --recursive
Vamos supor agora que você tenha descoberto. É o /etc/profile (no Gentoo é esse mesmo).
Primeiro de tudo, logue-se como root.
Se você estiver no X como usuário comum, abra um terminal qualquer e digite:
% su -
Esse sinal de "menos" é para carregar as variáveis de ambiente do superusuário. Não entendeu?
Então peço pra você simplesmente acreditar, porque variáveis de ambiente não são o objetivo dessa dica :)
Segundo de tudo, possivelmente o ato mais importante!
BACKUP. Faça uma cópia de segurança do arquivo que você descobriu que contém essa configuração. Se algo der errado (acredite, a chance é GRANDE!), você terá como restaurar seu bash e fazê-lo funcionar normalmente de novo.
Agora que você sabe que o arquivo é o /etc/profile e já fez o seu backup, pode abri-lo com o editor de sua preferência.
Se você estiver no KDE, sugiro o kedit ou o kwrite. Se estiver no GNOME, sugiro o gedit. Para todos, sugiro o nano. Chega de sugestões! :)
Localize a linha que começa por:
export PS1
"PS1" é o prompt que o bash te dá. Agora basta você dizer o que quer que apareça no seu prompt do bash.
Por exemplo, o meu é assim:
export PS1='\[\033[01;33m\]\t \[\033[01;32m\]\u@\h [\033[01;34m\]\w \$ \[\033[00m\]'
Isso deixa o meu prompt assim:
01:35:42 (em amarelo) usuario@minhamáquina (em verde) /usr/src/linux (em azul) $ (em azul)
Note, na linha do /etc/profile, os caracteres "\t", "\u", "\h", "\w" e "\$".
Eles indicam o que deve ser mostrado nesse ponto.
"\t" vem de "time", e mostra a hora. Por isso a primeira coisa que aparece no meu prompt é a hora.
"\u" vem de "user", e mostra o nome do usuário logado. Por isso no meu aparece usuario
"\h" é o "host", ou seja, o nome da máquina, que faz aparecer "minhamáquina".
Note que entre o \u e o \h existe um arroba. Isso faz aparecer "usuario@minhamaquina". Já tá dando pra entender?
"\w" vem de "where", e mostra o diretório onde eu me localizo no momento. O "~" que eu disse que aparece é porque eu estava no meu diretório /home/usuario naquele momento.
Aqui é interessante. Se você colocar um "\W" (maiúsculo), ele vai mostrar somente o diretório exato onde você se encontra, sem mostrar os diretórios abaixo de você. No meu caso, se tivesse um "\W" em vez do "\w", eu só veria:
01:35:42 usuario@minhamaquina linux $
(com as devidas cores, é claro).
Por último, o \$ não é nada especial, ele simplesmente mostra o próprio sÃmbolo "$".
Pronto? Ainda não! Faltam as cores!
A parte das cores é um pouco mais sofisticada. Você vê as partes do PS1 que contêm os pares "01;33", "01;32" e "01;34"? São exatamente esses pares que indicam a cor que deve aparecer.
E o "\033" que aparece em cada um desses termos, você vê? Infelizmente eu ainda não consegui descobrir como funcionam esses números, mas mexendo neles só consegui estragar o prompt. :(
Se você souber e quiser me explicar o significado do \033, por favor mande um e-mail para natunobilis[NOSPAM]gentoobr.org
Então vamos voltar à parte legal. As cores no bash são padronizadas. Então, você pode aproveitar o arquivo de configuração das cores de arquivos (/etc/DIR_COLORS) para descobrir qual cor é qual.
Dê um :
% grep "Attribute" /etc/DIR_COLORS -A5
D eve mostrar todas as cores. Se isso não funcionar, você pode simplesmente abrir o arquivo (dessa vez eu recomendo o comando less) e verificar cada uma das cores.
Para os apressados, e também para os que não conseguirem de jeito nenhum descobrir as cores no DIR_COLORS, aà vai a minha cópia do DIR_COLORS:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
Ou seja, o par "01;33" diz para o termo "\t" (hora) aparecer na cor amarela, e em negrito.
Na prática, o atributo "negrito" ("bold") só faz a cor aparecer como esperamos. Experimente mudar o atributo para 00 (ou seja, nenhum). Veja que a cor sairá meio marrom.
A minha opinião é que, na prática, somente os atributos "bold" e "none" (respectivamente, 00 e 01) são úteis. Os outros costumam incomodar mais do que
embelezar.
Como você já deve ter notado, a cor do texto é controlada pelo valor do par que vem depois do ponto-e-vÃrgula. No caso do "01;33", a cor é "amarelo". É possÃvel mudar também a cor do fundo. Mas eu considero este um bom jeito de deixar seu prompt mais feio, e não mais bonito :P
Você pode experimentar, em vez de usar um par "01;33", usar "01;33;41", para ver uma letra amarela num fundo vermelho (bonito...)
Notas: a cor definida no primeiro termo do PS1 se estenderá até o seu final, caso você não use outra cor em algum termo posterior. Ou seja, na minha configuração acima, se você deixar o primeiro termo ("\t") com a cor amarela, e não definir cor para os termos subseqüentes ("\u","\h","\w" e "\$"), todos os termos aparecerão em amarelo!
O mesmo vale para o fundo. Se você escolher um fundo vermelho para o primeiro termo, e não definir cor *de fundo* para os termos subseqüentes, todos eles ficarão vermelhos, mesmo que eles tenham diferentes cores para os caracteres!