26 de janeiro de 2012

Como dar cd num shell script e ter efeito no prompt

Como todo desenvolvedor, eu tenho vários diretórios com programas fonte. Alguns deles são mais ou menos assim:
/home/usuario/src/web2py/applications/estoque
/home/usuario/src/web2py/applications/clinica
/home/usuario/src/web2py/applications/twitter
/home/usuario/src/web2py/applications/livraria
Toda vez que eu quero ir até o diretório da aplicação clínica, tenho que digitar cd ~/src/web2py/applications/clinica.

Nada prático, né? Então, surgiu a grande ideia de fazer um script para dar o cd automaticamente, mas esbarrei numa característica do shell: toda vez que um script é executado, um novo subprocesso é disparado e o cd que meu script fez não tem efeito no prompt.

Vamos supor que meu script seja ~/bin/meucd. Uma alternativa é executá-lo usando o source, assim: source meucd clinica. Ainda fica grande. Mas o source pode ser abreviado com um ponto ("."). Agora, o inconveniente é sempre lembrar de digitar o tal ponto antes do meucd.

A solução que encontrei foi combinar dois recursos do shell: alias e scripts. Eu fiz assim:
1) Editei meu ~/.bash_aliases (ou ~/.bashrc para quem não usa Debian-like)
2) Adicionei o seguinte comando ao final dele: alias meucd='source ~/bin/meucd'

Fechei o terminal e abri-o novamente para carregar o .bash_aliases alterado.

Agora eu já posso digitar meucd clinica.

1 comentários:

  1. Vinícius, existe um script que faz exatamente o que você quer, se chama z.

    https://github.com/rupa/z

    Explicando como funciona:

    http://www.clientcide.com/best-practices/j-or-z-for-command-line-awesomeness/

    ResponderExcluir