É claro que existem aquelas pessoas que acreditam que o shell vai desaparecer e geralmente, são as pessoas que não o usam e acabaram de descobrir que ele existe, de forma que ainda não perceberam o poder que se esconde naquele assustador monte de caracteres feiosos. :)
Para quem já conhece o shell e se sente confortável trabalhando nele, talvez seja hora de torná-lo ainda mais útil. Vejamos neste post como tornar mais poderoso um componente sempre presente no shell: o prompt.
Se você usa uma distribuição como Ubuntu ou Fedora, seu prompt é, convenhamos, meio sem graça. Óbvio que ninguém deseja que seu prompt tenha letras piscando ou emita um som a cada vez que você pressionar ENTER, mas agregar novos recursos ao prompt pode ser uma boa ideia.
Configuração atual
echo $PS1
O resultado deve ser algo como:
\u@\h \W \$
Que exibe o seu prompt como:
usuário@máquina ~ $
Ou seja,
\u
\h
h
\W
W
Isso é muito mais útil do que apenas um simples
$
Primeiros testes
export PS1='[\u@\h] [\W] \$'
Atenção às aspas simples!
O interessante é que o resultado já vem logo em seguida:
[pablo@beren] [~] $
Já notou um problema incômodo? Com esse prompt, qualquer coisa escrita pelo usuário já aparece grudada no cifrão (ou "
[pablo@beren] [~] $cd /var/spool
Feio, não? Isso nos leva à
Corrija já o seu prompt:
[pablo@beren] [~] $export PS1='[\u@\h] [\W] \$ '
Notou o espaço após o
\$
$
Outras variáveis
/usr/lib/
/lib/
[pablo@beren] [~] $ cd /usr/lib [pablo@beren] [lib] $ pwd /usr/lib [pablo@beren] [lib] $ cd /lib [pablo@beren] [lib] $ pwd /lib
Percebeu o problema? Nossa variável
\W
/lib/
/usr/lib/
/hom e/pa blo/ dir1 /dir 2/di r3/l ib/
[pablo@beren] [lib] $
A forma mais prática para melhorar isso é substituir aquele
\W
\w
[pablo@beren] [lib] $ export PS1='[\u@\h] [\w] \$ ' [pablo@beren] [/lib] $ cd /usr/lib [pablo@beren] [/usr/lib] $
Agora, nosso
\w
home/
[pablo@beren] [/usr/lib] $ cd [pablo@beren] [~] $
A página de manual do Bash 4.0 (
man bash
man 1 bash
\a an ASCII bell character (07) \d the date in " Weekday Month Date" format (e.g., " Tue May 26" ) \D{format} the format is passed to strftime(3) and the result is inserted into the prompt string; an empty format results in a locale-specific time representation. The braces are required \e an ASCII escape character (033) \h the hostname up to the first `.' \H the hostname \j the number of jobs currently managed by the shell \l the basename of the shell's terminal device name \n newline \r carriage return \s the name of the shell, the basename of $0 (the portion following the final slash) \t the current time in 24-hour HH:MM:SS format \T the current time in 12-hour HH:MM:SS format \@ the current time in 12-hour am/pm format \A the current time in 24-hour HH:MM format \u the username of the current user \v the version of bash (e.g., 2.00) \V the release of bash, version + patch level (e.g., 2.00.0) \w the current working directory, with $HOME abbreviated with a tilde (uses the $PROMPT_DIRTRIM variable) \W the basename of the current working directory, with $HOME abbreviated with a tilde \! the history number of this command \# the command number of this command \$ if the effective UID is 0, a #, otherwise a $ \nnn the character corresponding to the octal number nnn \\ a backslash \[ begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt \] end a sequence of non-printing characters
Como você pode ver, é possível criar prompts que apitam (variável
\a
\n
[pablo@beren] [~] $ export PS1='[\u@\h] \n[\w] \a\$ ' [pablo@beren] [~] $
Além disso, a variável
\h
\H
Que horas são?
[pablo@beren] [~] $ export PS1='[\t] [\u@\h] [\w] \$ ' [17:54:38] [pablo@beren] [~] $
Contabilidade
[17:54:38] [pablo@beren] [~] $ export PS1='[\u@\h] [\w] \# \$ ' [pablo@beren] [~] 36 $
Se você usa o comando
history
history
\!
\#
[pablo@beren] [~] $ export PS1='[\u@\h] [\w] C:\# H:\! \$ ' [pablo@beren] [~] C:37 H:538 $
Usei
C:\# H:\!
Agora em cores
Se você incluir informações demais no seu prompt do Bash, pode acabar tendo dificuldade na hora de encontrar a informação desejada devido justamente ao excesso de informações. Uma saída interessante para esse problema é usar cores em vez de delimitadores (como os colchetes
[
]
Vejamos como incluir uma cor. Vamos colorir de azul o nome da máquina? É pra já!
[pablo@beren] [~] C:37 H:538 $ export PS1= 'u@\ [\03 3[00 ;34m \]\h \[\0 33[0 0m\] [\w] \$ ' pablo@ beren [~] $
Posso ouvir os gritos de desespero. Realmente, essas sequências de escape
\[\033[00;34m\]
\[\033[00m\]
< azul>
< /azul>
\[\033[00m\]
< /cor>
Vamos testar usando duas cores: vermelho para o nome de usuário (
\u
\h
pablo@ beren [~] $ export PS1= '\[\ 033[ 00;3 1m\] \u@\ [\03 3[00 ;34m \]\h \[\0 33[0 0m\] [\w] \$ ' pablo@ beren [~] $
Interessante, não?
Peso e cor
Você já deve ter percebido que, nas sequências de "
\[\033[00;34m\]
\[\033[00;31m\]
/etc/DIR_COLORS
# Below are the color init strings for the basic file types. A color init # string consists of one or more of the following numeric codes: # 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
Esses comentários chamam o peso da fonte de "
Os atributos são definidos no primeiro campo da sequência de escape. Ou seja:
\[\033[00;34m\]
\[\033[01;34m\]
Experimente e perceba a diferença.
Fique à vontade também para experimentar os demais atributos. Mas por favor, não use nenhum outro além de 00 e 01, pelo bem da estética. :)
Experimente um pouco as novas cores e seus resultados com e sem negrito. Em específico, veja a diferença entre o amarelo com e sem negrito.
Notou que o
01;33
00;33
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Mais atenção
Lembrando o comentário no arquivo
/etc/DIR_COLORS
# Background color codes: # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
Confira o resultado do comando:
export PS1= '\[\ 033[ 00;3 1m\] \u@\ [\03 3[01 ;34; 41m\ ]\h\ [\03 3[00 m\] [\w] \$ ' pablo@ beren [~] $
Como dizem por aí, é
.É
Como você pode ver, para aplicar uma cor de fundo, basta incluir o número da cor desejada após a cor da fonte, como fizemos no trecho
\[\0 33[0 1;34 ;41m \]\h
Fim dos testes. Onde eu gravo?
O arquivo que define a variável
PS1
/etc/profile
/etc/bashrc
/etc/bash/bashrc
Sem root
~/.bashrc
export PS1='definições que você mais gostou'
Com root
~/.bashrc
Uma forma eficaz de encontrar esse arquivo é a força bruta: usar o
grep
/etc/
grep --recursive PS1 /etc
No meu sistema Gentoo, trata-se do
/etc/bash/bashrc
Prompt diferente para o root
/etc/bash/bashrc
if [[ ${EUID} == 0 ]] ; then # Quando o usuário é ROOT: PS1='\[\ 033[ 00;3 3m\] \t \[\0 33[0 1;33 ;41m \]\u @\h\ [\03 3[01 ;34m \] \w \$\[\033[00m\] ' else # Quando o usuário é normal: PS1= '\[\ 033[ 00;3 3m\] \t \[\0 33[0 1;32 m\]\ u@\h \[\0 33[0 1;34 m\] \w \$\[\033[00m\] ' fi
Resultado: ao usar a conta de root, o prompt deixa ainda mais chamativo o campo com os nomes do usuário e da máquina:
12:34:56 root@beren ~ $
Outra possibilidade ainda mais apelativa seria:
if [[ ${EUID} == 0 ]] ; then # Quando o usuário é ROOT: PS1= '\[\ 033[ 00;3 3m\] \t \[\0 33[0 1;33 ;41m \]AT ENÇÃ O:RO OT@\ h\[\ 033[ 00m\ ]\[\ 033[ 01;3 4m\] \w \$\[\033[00m\] ' else # Quando o usuário é normal: PS1= '\[\ 033[ 00;3 3m\] \t \[\0 33[0 1;32 m\]\ u@\h \[\0 33[0 1;34 m\] \w \$\[\033[00m\] ' fi
Resultado do usuário root:
12:34:56 ATENÇÃO:ROOT@beren ~ $
12:34:56 pablo@beren ~ $
\[\033[00m\]
\h
Conclusão
Se você gostou de personalizar seu prompt, talvez tenha interesse em conhecer o shell também livre
Outro programa interessante para esse fim é o
Créditos externos a esse artigo --> Blog developer
Nenhum comentário:
Postar um comentário