Bash auto complete para variáveis de ambiente [closed]

21

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.

    
por nilchat 10.05.2011 / 23:30

4 respostas

11

Este bug foi introduzido no bash 4.2. Há um longo tópico sobre isso aqui:

link

Em suma, Chet Ramey, o desenvolvedor do bash, não sabe como consertá-lo ainda.

    
por geirha 11.05.2011 / 00:13
6

A solução sugerida no link é:

  1. use <Tab> para concluir automaticamente sua variável de ambiente s.t. sua linha de comando diz cd $MYVAR
  2. pressione <Esc> + <Ctrl>-E para expandir a linha de comando atual, ou seja, substitua $MYVAR pelo seu valor, o caminho
  3. adicione um / 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.

    
por kynan 28.07.2011 / 20:46
4

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
    
por user164395 11.07.2013 / 04:24
1

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.

    
por Scott C Wilson 27.02.2012 / 12:28