Prompt curto no Bash e ZSH

jun. 15, 2011·
Julio Batista Silva
Julio Batista Silva
· 2 minutos de leitura
blog Linux

Eu procuro deixar meus arquivos bem organizados para que seja fácil encontrar algum arquivo quando eu precisar; uma das consequências dessa organização é que, às vezes, é necessário navegar por vários subdiretórios até chegar onde quero.

Por exemplo, para um simples acesso a um livro, eu tenho que executar os seguintes comandos:

julio@julio-acer ~  $ cd /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp/
julio@julio-acer /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp  $ okular Practical Common Lisp.pdf &

Encontrar e navegar até a pasta correta não é nada complicado combinando tab completion, autojump plugins (ex.: fasd) e aliases no meu ~/.bashrc que me levam direto para a pasta desejada:

alias docs='cd /media/externo/Documentos'

O problema aqui é que o prompt da linha de comando exibe o caminho completo da pasta onde estou; nesse caso são apenas 8 diretórios com nomes curtos, mas, em muitos casos, é preciso entrar em pastas ainda mais profundas e com nomes longos, o que faz com que só o caminho para a pasta ocupe toda a tela.

Bash

Existe uma variável de sistema que “apara” a exibição desse caminho, limitando-o a um número máximo de diretórios mostrados. Essa variável é a PROMPT_DIRTRIM. Basta exportá-la igualada ao valor máximo de pastas a serem exibidas (3 é um bom número) que o restante do caminho será substituído por ....

Exemplo:

julio@julio-acer ~  $  cd /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp/
julio@julio-acer /media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp $  export PROMPT_DIRTRIM=3
julio@julio-acer .../Lisp/Peter Seibel/Practical Common Lisp  $  pwd
/media/externo/Documentos/Ebooks/Programacao/Lisp/Peter Seibel/Practical Common Lisp
julio@julio-acer .../Lisp/Peter Seibel/Practical Common Lisp  $

Para tonar essa alteração permanente, adicione a seguinte linha ao ~/.bashrc:

export PROMPT_DIRTRIM=3

ZSH

Para o ZSH não existe uma variável $PROMPT_DIRTRIM igual ao BASH, mas podemos conseguir um resultado parecido editando a variável do próprio $PROMPT (=$PS1):

julio@julio-acer /media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo> pwd
/media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo
julio@julio-acer /media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo> PROMPT='%n@%m %{$fg[$user_color]%}%3c%{$reset_color%}%(!.#.>) '
julio@julio-acer projetos/Sites/gera_curriculo> pwd
/media/externo/Documentos/Programacao/Web/comp/www/projetos/Sites/gera_curriculo

O segredo está no %3c, que faz com que apenas os 3 últimos diretórios sejam exibidos.

Para tornar essa mudança padrão, basta exportar essa variável no ~/.zshrc:

export PROMPT='%n@%m %{$fg[$user_color]%}%3c%{$reset_color%}%(!.#.>) '

O arquivo que utilizei como exemplo é um dos melhores livros introdutórios para aprender Common Lisp e pode ser consultado gratuitamente em http://gigamonkeys.com/book/

Julio Batista Silva
Authors
Senior Cloud Developer

Sou um engenheiro de computação brasileiro baseado na Alemanha, apaixonado por tecnologia, ciência, fotografia e línguas.

Programo há cerca de duas décadas, explorando desde aplicativos móveis e desenvolvimento web até aprendizado de máquina. Atualmente, foco em SRE de nuvem e engenharia de dados.

Sou voluntário nas comunidades de open source e Python, ajudando a organizar a PyCon DE e a PyData Berlin, mentorando e contribuindo com código e traduções.

No meu blog, compartilho dicas de Linux, guias de configuração e notas pessoais que escrevo para referência futura. Espero que outras pessoas também as considerem úteis. O conteúdo está disponível em vários idiomas.

Visite minha galeria para ver algumas das minhas fotografias.

Longe do teclado, você vai me encontrar em shows, tocando clarinete, pedalando, mergulhando ou explorando novos lugares, culturas e culinárias.

Sempre feliz em me conectar! 🙂

comments powered by Disqus