Este bug foi introduzido no bash 4.2. Há um longo tópico sobre isso aqui:
Em suma, Chet Ramey, o desenvolvedor do bash, não sabe como consertá-lo ainda.
O recurso bash autocomplete parece não funcionar com variáveis de ambiente no 11.04. O comportamento atual é indicado abaixo
export SCRIPT=/home/user/script
cd $SCRIPT/<tab>
resulta em um \ sendo adicionado antes de $SCRIPT , ou seja, o prompt se torna
cd $SCRIPT/
A mesma coisa acontece se cd for substituído por ls ou qualquer outro comando
Além disso, se houver um arquivo executável no caminho contido em $ SCRIPT e eu quiser executar isso
$SCRIPT/<tab>
O Bash não mostra as opções dentro da pasta (independentemente de haver um único arquivo ou vários arquivos / diretórios dentro do caminho contido nas variáveis de ambiente).
Em outras palavras, o preenchimento automático não funciona com variáveis de ambiente.
A solução sugerida no link é:
<Tab> para concluir automaticamente sua variável de ambiente s.t. sua linha de comando diz cd $MYVAR
<Esc> + <Ctrl>-E para expandir a linha de comando atual, ou seja, substitua $MYVAR pelo seu valor, o caminho / e, em seguida, desfrute do <Tab> preenchimento automático, como de costume Isso pressupõe que você esteja no modo emacs ( set -o emacs ) e tenha bash_completion configurado de forma sensata para cd (por exemplo, complete -o nospace -F _cd cd ).
Infelizmente, isso não funciona no modo vi ( set -o vi ) porque a expansão da linha de comando não está disponível.
Para recuperar o antigo comportamento, use o comando
shopt -s direxpand
ou inclua-o no seu .bashrc
Se você usar o mesmo .bashrc com diferentes versões do bash, use
if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
then shopt -s direxpand
fi
Depois de digitar a variável do shell
cd $SCRIPT/
digite Cntrl-Alt-E. Isso expande a variável
cd /home/user/script/
Isso funciona com EDITOR = vi no Fedora 16.