Navegando nos diretórios do terminal com CDPATH e bash-completion

Venho trazer a palavra da variável $CDPATH e do utilitário bash-completion, que juntos facilitam muito navegar pelos diretórios do seu sistema, quando usamos o terminal.

Não são recursos novos1, mas não conhecê-los leva os usuários a criarem soluções trabalhosas2 e frequentemente menos intuitivas para resolver a mesma questão: como chegar rapidamente ao subdiretório desejado, sem ter que digitar o caminho inteiro dele a cada vez.

A variável $CDPATH faz pelo comando ‘cd’ o que a variável $PATH faz pelos executáveis: quando definida, ela indica uma lista de diretórios onde o sistema irá procurar o subdiretório que o usuário mencionar como parâmetro do comando ‘cd’.

Por exemplo: se eu estiver no diretório ~/bin, e desejar ir para o diretório ~/devel/social/feedbot, o comando usual seria: cd ~/devel/social/mastodon-bot, porém se o diretório ~/devel/social fizer parte da lista que está no $CDPATH, bastará digitar cd mastodon-bot.

O mecanismo é simples: quando você usa o comando cd, a shell se encarregará de procurar o diretório mencionado dentro de cada um dos diretórios incluídos no $CDPATH e, assim que encontrar, completará a mudança de diretório. Há exceções e casos especiais, claro, mas o funcionamento básico é esse.

No meu caso, a variável está definida no arquivo ~/.bashrc, com uma linha como esta:


export CDPATH=".:..:$HOME/devel/social:$HOME/devel/:$HOME:/Volumes/WINCHESTER:/Volumes/SSD2TB"

Note que a minha lista acima começa com menção aos diretórios . e ... Isso não é obrigatório, mas garante que a shell sempre inicie a pesquisa pelo diretório corrente (ou .) e pelo pai do diretório corrente (ou ..).

Só isso já seria suficiente para adiantar a vida de quem passa os dias no terminal, mas o utilitário bash-completion traz um conforto a mais, para quem usa a shell Bash: com ele, o completamento automático (com a tecla Tab) no comando cd também passa a considerar a variável $CDPATH - em uma solução intuitiva e prática, que se torna natural já na primeira vez que você usa.

Você pode saber mais sobre o bash-completion e suas múltiplas outras utilidades na página dele no GitHub, mas considere que o provavelmente o seu sistema operacional ou distribuição tem um pacote pronto para instalá-lo (caso não tenha vindo instalado como default), e talvez até indique ou se encarregue de gerar as duas linhas que precisam ser inseridas no ~/.bashrc para ativar esse recurso a partir da abertura da sua próxima shell interativa.

No meu caso foi só instalar via Homebrew, colocar as linhas no ~/.bashrc, abrir um novo terminal, e começar a usar. Fácil e imediato.

 
  1.  Segundo a documentação do Open Group, a variável $CDPATH surgiu na shell do Unix System V (1983), mas mesmo antes disso o BSD já tinha um recurso análogo, na forma do parâmetro cdpath, na sua C Shell.

  2.  Não que reinventar a roda deixe de ser uma oportunidade interessante de aprendizado e até de entretenimento…