En una computadora remota con la versión de bash "3.2.51(1)-release" (SO: SUSE Linux Enterprise Server 11.1 (x86_64)), no pude completar la tabulación habitual con el nombre de la variable. por ejemplo, me gustaría escribir:
echo $OLDPWD/
luego, al final de la barra, puedo presionar "Tab" y el nombre de la variable se expandirá al nombre del directorio anterior (antes del último comando cd
o pushd
). Esto funciona en mi propia computadora portátil (Debian 7, versión Bash 4.2.37(1)). ¿Por qué en este shell bash de SLES no funcionaría?
De manera similar, si escribo
echo $OLDP
y luego presione "Tab" al final de la "P" allí, bash lo completará para $OLDPWD
. Esto tampoco sucedería en SLES 11 bash.
¿Qué variables de control (shopt? set?) que afectan este comportamiento?
Respuesta1
shopt -s direxpand
se expandirá echo $HOME/<tab>
a echo /home/matt/
bash 4.2. En bash 4.1 debería ser el valor predeterminado.
Creo que eso bash-completion
realmente puede estropear las cosas. Siempre desinstalo bash-completion
o ejecuto complete -r
para asegurarme de que las reglas de finalización individuales no hagan algo estúpido con las finalizaciones predeterminadas.
Si $OLDPWD
realmente está configurado, entonces echo $OLDP<tab>
debería expandirse a echo $OLDPWD
. No sé qué impediría que eso sucediera.
Respuesta2
Intente C-x $
en lugar de TAB
solicitar explícitamente posibles completaciones de variables (no de otra cosa).
Respuesta3
Comprueba la respuesta para urxvt - pestaña expande variables de entornopor Dmitri Alexandrov.
"Se trata de la opción de expansión directa.
$ shopt -s direexpand y $FOO_PATH/
se ampliará con TAB"