Você está na página 1de 9

02/02/2015 Prompt Bash avançado [Artigo]

PROMPT BASH AVANÇADO

Autor: Eduardo Vieira Mendes <eduardovmendes at gmail.com>


Data: 23/02/2007

INTRODUÇÃO

O que é o Bash?

O nome Bash significa Bourne Again Shell, um produto GNU. Ele é a interface padrão de linha de
comando utilizada praticamente em todas as distribuições GNU/Linux
(http://www.vivaolinux.com.br/linux/). Ela oferece interatividade com o usuário, oferecendo edição
de linha de comando, complementação de comandos histórico, bem como vários outros recursos
que apresentaremo mais abaixo.

O que o Bash pode fazer por você?

Muitos usuários Linux (http://www.vivaolinux.com.br/linux/) tem seu console em apenas uma cor
(normalmente cinza), onde estão contidas informações como seu nome de usuário, o nome da
máquina onde ele está trabalhando e alguma informação sobre o diretório atual. Estas são
informações úteis, mas você pode fazer muito mais com o prompt: vários tipos de informações
podem ser mostradas, assim como o número do terminal onde se está trabalhando, hora, data,
número de usuários conectados, uptime, etc e ainda se ter um prompt colorido, deixando o visual
mais agradável para se trabalhar.

Também é possível que se coloque informações na barra de títulos do Xterm para que forneça
alguma informação.

APARÊNCIA DO PROMPT

A aparência do prompt é controlada pela variável PS1. Continuações de comando são indicadas
pela variável PS2. Existem ainda as variáveis PS3 e PS4, mas vamos restringir as modificações à
variável PS1, que é a que realmente nos interessa para as modificações propostas no artigo.

Se quiser saber mais sobre as variáveis PS2, PS3 e PS4, veja a man page do bash com o
comando:

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6111 1/9
02/02/2015 Prompt Bash avançado [Artigo]

$ man bash

Antes de iniciarmos é bom que se faça um backup da sua variável PS1, pois as modificações a
seguir serão efetuadas imediatamente. Então caso você não goste da modificação 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 variável de ambiente com o valor da variável PS1 com o
comando:

$ PS1BKP=$PS1

Assim, sempre que precisar voltar à variável PS1 anterior basta usar o comando:

$ PS1=$PS1BKP

Para setarmos a variável PS1 devemos digitar no terminal o seguinte comando:

PS1=parâmetros

Onde "parâmetros" são as informações que queremos ter no nosso prompt.

Um simples prompt terá a aparência a seguir, com um simples caractere:

[vodooo@linux]$ PS1=$
$ls
bin mail
$

Para demonstrar o melhor jeito e experimentando com os parâmetros básicos, veja que logo após
você digitar o comando para mudar a variável e teclar enter, o prompt é automaticamente
atualizado.

$PS1="$ "
$ ls
bin mail
$

Veja que apenas adicionamos um espaço em branco ao final da variável para que fique mais
legível o comando que estamos digitando.

SEQÜÊNCIA DE CARACTERES DE ESCAPE DO BASH

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6111 2/9
02/02/2015 Prompt Bash avançado [Artigo]

Existem vários caracteres especiais que podemos adicionar ao prompt. Segue a lista de caracteres
retirados da man page do Bash 2.04.

\a o caractere ASCII para o sino do sistema (07)


\d a data no formato "Dia da semana Mês Dia" (ex., "Qui Jan 18")
\e o caractere ASCII esc (033)
\h o hostname da máquina antes do 1º "."
\H o hostname da máquina
\j o número de processos atualmente gerenciados pelo shell
\l o nome do dispositivo do terminal
\n nova linha
\r retorno do cursor
\s o nome do shell
\t data atual no formato de 24­horas HH:MM:SS
\T data atual no formato de 12­horas HH:MM:SS
\ @ data atual no formato de 12­hour am/pm
\u o nome do usuário atual
\v a versão do bash (ex., 2.02)
\V a liberação, versão + patchlevel (ex., 2.00.0)
\w o diretório atual
\W o nome base do diretório corrente
\ ! o número no histórico do comando atual
\ # o número do comando desde que aberto o terminal
$ se o usuário tiver UID igual a 0, ou seja, o usuário atual é o root, aparecerá o caractere #, ou
\
então $ para todos os outros usuários.
\nnno caractere correspondente ao número octal nnn
\ uma barra invertida
[ inicio de uma seqüência de caracteres que não serão mostrados na tela. ex. colocar cor nas
\
letras)
\ ] fim de uma seqüência de caracteres que não serão mostrados na tela.

Os caracteres \j e \l só foram inseridos a partir da versão 2.03 do Bash.

Continuando com os exemplos:

[vodooo@linux]$ PS1="\u@\h \W> "


vodooo@linux> ls
bin mail
vodooo@linux>

Este é similar ao padrão da maioria das distribuições:

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6111 3/9
02/02/2015 Prompt Bash avançado [Artigo]

vodooo@linux> PS1="[\t][\u@\h:\w]\$ "


[13:53:10][vodooo@linux:~]$ ls
bin mail
[13:53:15][vodooo@linux:~]$

SETANDO A VARIÁVEL PS1 PERMANENTEMENTE

Você notará que ao fechar o terminal ou após uma reinicialização do sistema o seu prompt voltará
ao padrão da distribuição.

Isso acontece por que os arquivos de inicialização do Linux setam essa variável na inicialização,
então o que temos que fazer e alterar esse arquivo para deixarmos essa variável como queremos.

Mas este arquivo nem sempre é o mesmo de uma distribuição para outra. Os arquivos mais
comuns para que seja feita esta alteração são: /etc/profile, /etc/bashrc. ~/.bash_profile e /.bashrc.

CARACTERES NÃO IMPRIMÍVEIS, ALIASES E FUNÇÕES

CARACTERES NÃO IMPRIMÍVEIS

Muitas das mudanças feitas no prompt do Bash são feitas usando este tipo de caractere, assim
como mudar a cor do prompt, mudar a barra de títulos do Xterm e mover o cursor para um ponto
desejado.

Vamos começar com um prompt simples.

[vodooo@linux]$ PS1='> '


>

Agora com o uso de caracteres não imprimíveis irei mudar a cor do prompt deixando o sinal de
maior (>) com uma cor amarela.

> PS1='\[\033[1;33m\]>\[\033[0m\] '

ALIASES E FUNÇÕES

Aliases e funções são utilizados para incrementar alguns recursos ou simplesmente simplificar
comandos mais complexos.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6111 4/9
02/02/2015 Prompt Bash avançado [Artigo]

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".

Funções são utilizadas para se executar comandos mais complexos, que necessitem de mais de
uma linha para serem executados.

Exemplo de função:

function lf
{
ls ­­color=tty ­­classify $*
echo "$(ls ­l $* | wc ­l) files"
}

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

COMANDOS EXTERNOS

PROMPT_COMMAND

O Bash provê uma variável de ambiente chamada PROMPT_COMMAND. O conteúdo desta


variável é executado toda vez que o prompt é mostrado na tela, ou seja, logo após a abertura do
terminal ou após 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 após cada comando, o conteúdo da variável
PROMPT_COMMAND é executado, neste caso o comando "date +%H:%M", que mostra a hora e
os minutos atuais separado pelo caractere :.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6111 5/9
02/02/2015 Prompt Bash avançado [Artigo]

Repare que este comando não faz mais parte do prompt, pois o comando é executado após 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 variável.

UTILIZANDO COMANDOS EXTERNOS NO PROMPT

É possível ainda utilizar comandos externos diretamente no prompt.

Obviamente, você não 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 é necessário a barra invertida antes do $ para que seja reconhecido como comando o
que estiver entre parênteses.

Você pode também utilizar a funcionalidade de scripts no prompt.

Veja o exemplo abaixo:

#!/bin/bash
# lsbytes ­ mostra a quantidade de bytes da listagem de um diretório listing

tbytes=0

for bytes in $(ls ­l | grep "^­" | awk '{ print $5 }') ; do


let tbytes=$tbytes+$bytes

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6111 6/9
02/02/2015 Prompt Bash avançado [Artigo]

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)]$

COLORINDO O TERMINAL

O código responsável pela colorização do prompt é o \[\033[ no início e \] no final.

Exemplo:

PS1="\[\033[31m\][\$(date +%H%M)][\u@\h:\w]$ "

Veja que após o código da cor (neste caso o 31 para a cor vermelha é necessário que se coloque a
letra "m" logo após o código 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 pedaço de código, desta vez no final da PS1.

Este código "\[\033[0m\]" faz com o a cor do texto no final do prompt volte ao normal.

Segue abaixo uma tabela de algumas cores disponíveis.

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6111 7/9
02/02/2015 Prompt Bash avançado [Artigo]

Preto 30
Vermelho 31
Verde 32
Marrom 33
Azul 34

Existem ainda várias outras de cores que não serão listadas aqui.

Você pode também usar fontes em negrito. Para isso adicione o caractere 1 antes ou após o
código da cor separado por ; (ponto e vírgula).

Exemplo:

PS1="\[\033[1;34m\][\$(date +%H:%M)][\u@\h:\w]$\[\033[0m\] "

Você pode também definir uma cor de fundo. Para isto adicione um número de cor de fundo antes
do código de cor separado por ; (ponto e vírgula).

Exemplo:

PS1="\[\033[42;1;31m\][\$(date +%H:%M)][\u@\h:\w]$\[\033[0m\] "

Estes código sempre seguem este formato:

1 ou 0 ‐ 1 liga o negrito e 0 desliga (o mesmo que não colocar nada)


3# ‐ Para escolher cor da fonte. Ex. 31
41 ‐ Para escolher cor de fundo. Ex. 41

CONCLUSÃO

Existem ainda muitas outras funcionalidades do bash que não 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 número total de processos sendo rodados na
máquina, informações sobre baterias de laptop's, informações sobre chegada de e­mail, entre
outras funções.

Mas deixo estas opções a cargo de vocês 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/artigos/impressora.php?codigo=6111 8/9
02/02/2015 Prompt Bash avançado [Artigo]

 Voltar (verArtigo.php?codigo=6111)

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=6111 9/9

Você também pode gostar