Personalizar o Terminal Bash no Debian — Prompt Minimalista e Funcional

Personalizar o Terminal Bash no Debian — Prompt Minimalista e Funcional

HJFR Cybersecurity Training — Fevereiro 2026

O prompt predefinido do Bash no Debian é funcional, mas básico. Neste artigo, vamos transformá-lo num prompt minimalista que mostra informação útil sem ruído: utilizador, diretório atual, branch do Git, indicador de alterações pendentes e código de saída do último comando.

Antes e Depois

Prompt original do Debian

user@hostname:~/path$

Novo prompt

┌─[hjfr@debian]─[~/code/myproject]─[main]
└─$ 

Com alterações pendentes no Git

┌─[hjfr@debian]─[~/code/myproject]─[main *]
└─$ 

Quando o último comando falha

┌─[hjfr@debian]─[~/code/myproject]─[main]─[✘ 1]
└─$ 

Funcionalidades

Funcionalidade Descrição
Utilizador e hostname Apresenta o utilizador e a máquina em ciano, para identificação rápida.
Diretório atual Mostra o caminho completo em azul, facilitando a navegação.
Branch do Git Quando dentro de um repositório Git, mostra a branch atual em verde.
Indicador de alterações Adiciona um asterisco (*) quando existem alterações não commitadas.
Código de saída Quando o último comando falha, mostra o código de erro em vermelho (✘).
Duas linhas Separa a informação (linha 1) do cursor de escrita (linha 2), evitando linhas demasiado longas.

Passos de Instalação

Passo 1: Abrir o ficheiro .bashrc

nano ~/.bashrc

Passo 2: Localizar o bloco do PS1

Procurar as linhas que contêm if [ "$color_prompt" = yes ]; then e o PS1= original.

Passo 3: Substituir o bloco do PS1

Apagar desde o if [ "$color_prompt" até ao esac do xterm title e colar o código novo (ver abaixo).

Passo 4: Guardar e sair

No nano: Ctrl+O para guardar, Ctrl+X para sair.

Passo 5: Recarregar o .bashrc

source ~/.bashrc

Código Completo

Substituir o bloco do PS1 no ficheiro ~/.bashrc pelo seguinte código:

# Custom prompt: minimal + useful
# Colors
_C_RESET='\[\033[0m\]'
_C_GRAY='\[\033[38;5;244m\]'
_C_CYAN='\[\033[38;5;37m\]'
_C_BLUE='\[\033[38;5;33m\]'
_C_GREEN='\[\033[38;5;35m\]'
_C_RED='\[\033[38;5;196m\]'
_C_YELLOW='\[\033[38;5;220m\]'

# Git branch + dirty indicator
__git_prompt() {
    local branch
    branch=$(git symbolic-ref --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null)
    if [ -n "$branch" ]; then
        local dirty=""
        local status=$(git status --porcelain 2>/dev/null)
        if [ -n "$status" ]; then
            dirty=" *"
        fi
        echo "─[\033[38;5;35m${branch}${dirty}\033[0m]"
    fi
}

# Exit code indicator
__exit_prompt() {
    if [ $1 -ne 0 ]; then
        echo "─[\033[38;5;196m✘ $1\033[0m]"
    fi
}

__build_prompt() {
    local exit_code=$?
    local git_info=$(__git_prompt)
    local exit_info=$(__exit_prompt $exit_code)
    PS1="\n${_C_GRAY}┌─${_C_RESET}[${_C_CYAN}\u@\h${_C_RESET}]─[${_C_BLUE}\w${_C_RESET}]${git_info}${exit_info}\n${_C_GRAY}└─${_C_RESET}\$ "
}

PROMPT_COMMAND=__build_prompt

Explicação do Código

Variáveis de cor

As variáveis _C_RESET, _C_CYAN, _C_BLUE, etc. guardam os códigos ANSI de cor. Usamos \[…\] para indicar ao Bash que estes caracteres não ocupam espaço visual, evitando problemas com o cálculo do comprimento da linha.

Função __git_prompt()

Esta função usa git symbolic-ref para obter o nome da branch atual. Se não estiver dentro de um repositório Git, não mostra nada. Executa também git status --porcelain para verificar se existem alterações pendentes, adicionando um asterisco (*) caso existam.

Função __exit_prompt()

Recebe o código de saída do último comando. Se for diferente de zero (erro), mostra ✘ seguido do código em vermelho.

Função __build_prompt()

Esta é a função principal, chamada automaticamente antes de cada prompt através de PROMPT_COMMAND. Captura o código de saída ($?), chama as funções auxiliares e constrói o PS1 final com duas linhas.

PROMPT_COMMAND

Ao atribuir __build_prompt a PROMPT_COMMAND, o Bash executa esta função antes de apresentar cada prompt, garantindo que a informação está sempre atualizada.

Dicas Adicionais

  • Para testar sem alterar o .bashrc, pode colar o código diretamente no terminal — o efeito é temporário.
  • Se usar tmux ou screen, confirme que o TERM está definido como xterm-256color para as cores funcionarem.
  • Para personalizar as cores, consulte a tabela de 256 cores ANSI: cada número (0-255) representa uma cor diferente.
  • Se preferir um prompt de uma única linha, remova o \n e os caracteres ┌─ e └─ do PS1.

HJFR Cybersecurity Training — www.hjfr-info.pt