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.