Sunteți pe pagina 1din 9

Prompt Bash avanado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.p...

Prompt Bash avanado


Autor: Eduardo Vieira Mendes <eduardovmendes at gmail.com> Data: 23/02/2007 Introduo O que o Bash? O nome Bash significa Bourne Again Shell, um produto GNU. Ele a interface padro de linha de comando utilizada praticamente em todas as distribuies GNU/Linux. Ela oferece interatividade com o usurio, oferecendo edio de linha de comando, complementao de comandos histrico, bem como vrios outros recursos que apresentaremo mais abaixo. O que o Bash pode fazer por voc? Muitos usurios Linux tem seu console em apenas uma cor (normalmente cinza), onde esto contidas informaes como seu nome de usurio, o nome da mquina onde ele est trabalhando e alguma informao sobre o diretrio atual. Estas so informaes teis, mas voc pode fazer muito mais com o prompt: vrios tipos de informaes podem ser mostradas, assim como o nmero do terminal onde se est trabalhando, hora, data, nmero de usurios conectados, uptime, etc e ainda se ter um prompt colorido, deixando o visual mais agradvel para se trabalhar. Tambm possvel que se coloque informaes na barra de ttulos do Xterm para que fornea alguma informao.

Aparncia do prompt A aparncia do prompt controlada pela varivel PS1 . Continuaes de comando so indicadas pela varivel PS2 . Existem ainda as variveis PS3 e PS4 , mas vamos restringir as modificaes varivel PS1, que a que realmente nos interessa para as modificaes propostas no artigo.

1 of 9

11/05/2010 01:35 PM

Prompt Bash avanado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.p...

Se quiser saber mais sobre as variveis PS2, PS3 e PS4, veja a man page do bash com o comando: $ man bash Antes de iniciarmos bom que se faa um backup da sua varivel PS1, pois as modificaes a seguir sero efetuadas imediatamente. Ento caso voc no goste da modificao que foi feita, poder retornar o formato anterior sem que se tenha que fechar e abrir novamente o terminal (Xterm) ou reiniciar o computador (console). Para isso apenas vamos criar uma varivel de ambiente com o valor da varivel PS1 com o comando: $ PS1BKP=$PS1 Assim, sempre que precisar voltar varivel PS1 anterior basta usar o comando: $ PS1=$PS1BKP Para setarmos a varivel PS1 devemos digitar no terminal o seguinte comando:

PS1=parmetros
Onde "parmetros" so as informaes que queremos ter no nosso prompt. Um simples prompt ter a aparncia a seguir, com um simples caractere: [vodooo@linux]$ PS1=$ $ls bin mail $ Para demonstrar o melhor jeito e experimentando com os parmetros bsicos, veja que logo aps voc digitar o comando para mudar a varivel e teclar enter, o prompt automaticamente atualizado. $PS1="$ " $ ls bin mail $

2 of 9

11/05/2010 01:35 PM

Prompt Bash avanado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.p...

Veja que apenas adicionamos um espao em branco ao final da varivel para que fique mais legvel o comando que estamos digitando.

Seqncia de caracteres de escape do Bash Existem vrios caracteres especiais que podemos adicionar ao prompt. Segue a lista de caracteres retirados da man page do Bash 2.04. \a \d \e \h \H \j \l \n \r \s \t \T \ \u \v \V \w \W \ \ \ o caractere ASCII para o sino do sistema (07) a data no formato "Dia da semana Ms Dia" (ex., "Qui Jan 18") o caractere ASCII esc (033) o hostname da mquina antes do 1 "." o hostname da mquina o nmero de processos atualmente gerenciados pelo shell o nome do dispositivo do terminal nova linha retorno do cursor o nome do shell data atual no formato de 24-horas HH:MM:SS data atual no formato de 12-horas HH:MM:SS @ data atual no formato de 12-hour am/pm o nome do usurio atual a verso do bash (ex., 2.02) a liberao, verso + patchlevel (ex., 2.00.0) o diretrio atual o nome base do diretrio corrente ! o nmero no histrico do comando atual # o nmero do comando desde que aberto o terminal $ se o usurio tiver UID igual a 0, ou seja, o usurio atual o root, aparecer o caractere #, ou ento $ para todos os outros usurios.

3 of 9

11/05/2010 01:35 PM

Prompt Bash avanado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.p...

\nnn o caractere correspondente ao nmero octal nnn \ \ \ uma barra invertida [ inicio de uma seqncia de caracteres que no sero mostrados na tela. ex. colocar cor nas letras) ] fim de uma seqncia de caracteres que no sero mostrados na tela.

Os caracteres \j e \l s foram inseridos a partir da verso 2.03 do Bash. Continuando com os exemplos: [vodooo@linux]$ PS1="\u@\h \W> " vodooo@linux> ls bin mail vodooo@linux> Este similar ao padro da maioria das distribuies: vodooo@linux> PS1="[\t][\u@\h:\w]\$ " [13:53:10][vodooo@linux:~]$ ls bin mail [13:53:15][vodooo@linux:~]$

Setando a varivel permanentemente

PS1

Voc notar que ao fechar o terminal ou aps uma reinicializao do sistema o seu prompt voltar ao padro da distribuio. Isso acontece por que os arquivos de inicializao do Linux setam essa varivel na inicializao, ento o que temos que fazer e alterar esse arquivo para deixarmos essa varivel como queremos. Mas este arquivo nem sempre o mesmo de uma distribuio para outra. Os arquivos mais comuns para que seja feita esta alterao so: /etc/profile, /etc/bashrc. ~/.bash_profile e /.bashrc.

4 of 9

11/05/2010 01:35 PM

Prompt Bash avanado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.p...

Caracteres no imprimveis, aliases e funes

Caracteres no imprimveis
Muitas das mudanas feitas no prompt do Bash so feitas usando este tipo de caractere, assim como mudar a cor do prompt, mudar a barra de ttulos do Xterm e mover o cursor para um ponto desejado. Vamos comear com um prompt simples. [vodooo@linux]$ PS1='> ' > Agora com o uso de caracteres no imprimveis irei mudar a cor do prompt deixando o sinal de maior (>) com uma cor amarela. > PS1='\[\033[1;33m\]>\[\033[0m\] '

Aliases e funes
Aliases e funes so utilizados para incrementar alguns recursos ou simplesmente simplificar comandos mais complexos. Exemplo de alias: alias cdon="mount /dev/hdc /mnt/cdrom" O alias acima diz que quando digitarmos o comando "cdon" ser executado o comando "mount /dev/hdc /mnt/cdrom". Funes so utilizadas para se executar comandos mais complexos, que necessitem de mais de uma linha para serem executados. Exemplo de funo: function lf { ls --color=tty --classify $* echo "$(ls -l $* | wc -l) files"

5 of 9

11/05/2010 01:35 PM

Prompt Bash avanado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.p...

} Assim, quando eu digitar "lf", tudo o que est entre as chaves ser executado.

Comandos externos

PROMPT_COMMAND
O Bash prov uma varivel de ambiente chamada PROMPT_COMMAND. O contedo desta varivel executado toda vez que o prompt mostrado na tela, ou seja, logo aps a abertura do terminal ou aps cada comando executado. [vodooo@linux:~] PROMPT_COMMAND="date +%H:%M" 14:21 [vodooo@linux:~] ls bin mail 14:22 [vodooo@linux:~] O que acontece no exemplo acima que logo aps cada comando, o contedo da varivel PROMPT_COMMAND executado, neste caso o comando "date +%H:%M", que mostra a hora e os minutos atuais separado pelo caractere :. Repare que este comando no faz mais parte do prompt, pois o comando executado aps o prompt ser mostrado, mas isso pode ser resolvido adicionando-se o comando "echo -n", que faz com o a hora seja exibida na mesma linha do prompt. [vodooo@linux:~] PROMPT_COMMAND="echo -n [$(date +%H:%M)]" [14:22][vodooo@linux:~]$ [14:22][vodooo@linux:~]$ ls bin mail [14:22][vodooo@linux:~]$ unset PROMPT_COMMAND [vodooo@linux:~] Usei o comando unset PROMPT_COMMAND para limpar a varivel.

6 of 9

11/05/2010 01:35 PM

Prompt Bash avanado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.p...

Utilizando comandos externos no prompt possvel ainda utilizar comandos externos diretamente no prompt. Obviamente, voc no deve usar comandos que gerem resultados longos ou que demorem muito tempo para serem executados, pois este ser executado cada vez que o prompt aparecer, ou seja, quando se abre um terminal ou ao final de cada comando digitado. [vodooo@linux:~]$ PS1="[\$(date +%H:%M)][\u@\h:\w]\$ " [14:48][vodooo@linux:~]$ ls bin mail [14:48][vodooo@linux:~]$ Repare que necessrio a barra invertida antes do $ para que seja reconhecido como comando o que estiver entre parnteses. Voc pode tambm utilizar a funcionalidade de scripts no prompt. Veja o exemplo abaixo: #!/bin/bash # lsbytes - mostra a quantidade de bytes da listagem de um diretrio listing tbytes=0 for bytes in $(ls -l | grep "^-" | awk '{ print $5 }') ; do let tbytes=$tbytes+$bytes done tmeg=$(echo -e "scale=3 \n$Ttbytes/1048576 \nquit" | bc) echo -n "$tmeg" # Script baseado no script de Giles Orr Salve o script com o nome de "lsbyte" na pasta /usr/bin. Agora iremos us-lo no prompt. [14:50][vodooo@linux:~]$ PS1="[\u@\h:\w (\$(lsbyte) Mb)]\$ " [vodooo@linux:~ (0 Mb)]$ cd /bin [vodooo@linux:/bin (4.498 Mb)]$

7 of 9

11/05/2010 01:35 PM

Prompt Bash avanado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.p...

Colorindo o terminal O cdigo responsvel pela colorizao do prompt o \[\033[ no incio e \] no final. Exemplo: PS1="\[\033[31m\][\$(date +%H%M)][\u@\h:\w]$ " Veja que aps o cdigo da cor (neste caso o 31 para a cor vermelha necessrio que se coloque a letra "m" logo aps o cdigo da cor. O que acontece neste exemplo acima que quando se coloca a cor vermelha no prompt, qualquer texto que voc digitar continuar em vermelho. Vejamos outro exemplo: PS1="\[\033[31m\][\$(date +%H:%M)][\u@\h:\w]$\[\033[0m\] " Veja que agora adicionamos mais um pedao de cdigo, desta vez no final da PS1. Este cdigo "\[\033[0m\]" faz com o a cor do texto no final do prompt volte ao normal. Segue abaixo uma tabela de algumas cores disponveis.
Preto Vermelho Verde Marrom Azul 30 31 32 33 34

Existem ainda vrias outras de cores que no sero listadas aqui. Voc pode tambm usar fontes em negrito. Para isso adicione o caractere 1 antes ou aps o cdigo da cor separado por ; (ponto e vrgula). Exemplo:

8 of 9

11/05/2010 01:35 PM

Prompt Bash avanado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.p...

PS1="\[\033[1;34m\][\$(date +%H:%M)][\u@\h:\w]$\[\033[0m\] " Voc pode tambm definir uma cor de fundo. Para isto adicione um nmero de cor de fundo antes do cdigo de cor separado por ; (ponto e vrgula). Exemplo: PS1="\[\033[42;1;31m\][\$(date +%H:%M)][\u@\h:\w]$\[\033[0m\] " Estes cdigo sempre seguem este formato:
1 ou 0 - 1 liga o negrito e 0 desliga (o mesmo que no colocar nada) 3# - Para escolher cor da fonte. Ex. 31 41 - Para escolher cor de fundo. Ex. 41

Concluso
Existem ainda muitas outras funcionalidades do bash que no foram descritas aqui, assim como checar o terminal em uso atualmente, contagem de processos sendo rodados a partir do terminal em uso, o tempo que o computador est ligado, o nmero total de processos sendo rodados na mquina, informaes sobre baterias de laptop's, informaes sobre chegada de e-mail, entre outras funes. Mas deixo estas opes a cargo de vocs para poderem exercitar seus conhecimentos. Espero ter sido til. Qualquer coisa me mande um email: eduardovmendes (a) gmail ponto com

http://www.vivaolinux.com.br/artigo/Prompt-Bash-avancado Voltar para o site

9 of 9

11/05/2010 01:35 PM

S-ar putea să vă placă și