1001Ferramentas
💲 Dev

Gerador de Prompt Bash (PS1)

Compõe PS1 com cores ANSI, usuário, host, diretório, branch git e exit code do último comando. Live preview do prompt.

PS1:

Preview aproximado:

Montar o prompt do bash sem decorar os códigos

A variável que define o prompt do bash aceita uma coleção de escapes de barra invertida: usuário, máquina, diretório, hora, o símbolo que muda conforme você ser root ou não. Decorar isso não compensa — são mais de vinte códigos e ninguém mexe no prompt com frequência suficiente para fixá-los.

Escolha os elementos e as cores e a página monta a variável pronta. O detalhe técnico que mais causa problema aparece aí: as sequências de cor precisam vir entre os marcadores de início e fim de texto não imprimível. Sem eles, o bash conta os caracteres invisíveis da cor no comprimento do prompt, e o resultado é a linha de comando se sobrescrevendo quando você navega no histórico ou edita um comando longo.

Para valer sempre, a definição vai no arquivo lido em shell interativo, tipicamente ~/.bashrc. Vale lembrar que existe também a variável do prompt de continuação, aquela que aparece quando um comando fica incompleto, e a de rastreamento, usada quando se liga a depuração de script — se você já se perdeu num script com muitas linhas repetidas, configurar essa última com número da linha ajuda bastante.

Perguntas frequentes

Por que meu prompt bagunça ao voltar no histórico?
Porque as sequências de cor não estão entre os marcadores de não imprimível. O bash usa a contagem de caracteres para saber onde o cursor está; contando os invisíveis, ele erra a posição e o texto se sobrescreve. É o defeito mais comum em prompt copiado da internet.
Como coloco o ramo do Git no prompt?
Chamando uma função dentro da variável. O cuidado é usar aspas simples na definição, para o comando ser avaliado a cada prompt e não uma vez só. E vale lembrar do custo: cada prompt passa a executar um comando de Git, o que fica perceptível em repositório muito grande.
Dá para mostrar o código de saída do comando anterior?
Dá, e é bem útil: guardando o valor logo no começo e exibindo condicionalmente, o prompt mostra o código só quando o comando falhou. A ordem importa — a captura tem de ser a primeira coisa, antes de qualquer outro comando dentro do prompt sobrescrever o valor.

Ferramentas Relacionadas