Em um computador remoto com versão bash "3.2.51(1)-release" (SO: SUSE Linux Enterprise Server 11.1 (x86_64)), não consegui completar uma guia normal com o nome da variável. por exemplo, gostaria de digitar:
echo $OLDPWD/
então, no final da barra, posso clicar em "Tab" e o nome da variável seria expandido para o nome do diretório antigo (antes do último cd
ou pushd
comando). Isso funciona no meu próprio laptop (Debian 7, Bash 4.2.37(1)-release). Por que neste shell bash do SLES isso não funcionaria?
Da mesma forma, se eu digitar
echo $OLDP
e então pressione "Tab" no final do "P", o bash completaria isso para $OLDPWD
. Isso também não aconteceria no bash do SLES 11.
Quais variáveis de controle (shopt? set?) que afetam esse comportamento?
Responder1
shopt -s direxpand
fará echo $HOME/<tab>
a expansão para echo /home/matt/
o bash 4.2. No bash 4.1, deve ser o padrão.
Acho que isso bash-completion
pode realmente bagunçar as coisas. Eu sempre desinstalo bash-completion
ou executo complete -r
para ter certeza de que as regras de conclusão individuais não estão fazendo algo estúpido com as conclusões padrão.
Se $OLDPWD
estiver realmente definido, echo $OLDP<tab>
deverá expandir para echo $OLDPWD
. Não sei o que impediria que isso acontecesse.
Responder2
Tente, C-x $
em vez de TAB
, solicitar explicitamente possíveis conclusões variáveis (e não outra coisa).
Responder3
Verifique a resposta para urxvt - aba expande variáveis de ambientepor Dmitry Alexandrov.
"Trata-se da opção direexpand.
$ shopt -s direexpand e $FOO_PATH/
será expandido por TAB"