Tema LinuxBSD Ver. 0.2 lnx
 http://www.linuxbsd.com.br 

  


  

  

Personalizando e Colorindo o Prompt do Bash

Enviado por DarkWarrior em Qua, 2007-01-17 09:56.

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!

»