bash: o nome da variável não está sendo expandido com o preenchimento da guia

bash: o nome da variável não está sendo expandido com o preenchimento da guia

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 cdou pushdcomando). 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 direxpandfará 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-completionpode realmente bagunçar as coisas. Eu sempre desinstalo bash-completionou executo complete -rpara 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 $OLDPWDestiver 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"

informação relacionada