21 votos

Bash auto completa para las variables de entorno

El bash característica autocompletar no se parecen a trabajar con las variables de entorno en 11.04. El comportamiento actual se indica a continuación

export SCRIPT=/home/user/script
cd $SCRIPT/<tab>

resultados en \ ser añadido antes de $SCRIPT es decir, se convierte en el símbolo del sistema

cd \$SCRIPT/

Lo mismo sucede si cd está sustituido con ls o cualquier otro comando

También, si no es un archivo ejecutable en la ruta de acceso contenidas en $SCRIPT y quiero correr que

$SCRIPT/<tab>

Bash no se muestran las opciones dentro de la carpeta (independientemente de si hay un solo archivo o varios archivos/directorios dentro de la ruta contenida en las variables de entorno).

En otras palabras, la función autocompletar no funciona con las variables de entorno.

11voto

Steve Karg Puntos 11

Este error fue introducido en bash 4.2. Hay un hilo muy largo sobre él aquí:

http://lists.gnu.org/Archive/HTML/bug-Bash/2011-02/msg00274.html

En Resumen, Chet Ramey, el desarrollador de bash, no está seguro cómo fijar todavía.

6voto

kynan Puntos 1086

La solución sugerida en http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html es:

  1. uso <Tab>a auto-completar tu variable de entorno s.t. de línea de comandos dice cd $MYVAR
  2. golpear <Esc>+<Ctrl>-E a ampliar la actual línea de comandos es decir, sustituto $MYVAR su valor, la ruta de acceso
  3. añadir un / y, a continuación, disfrutar <Tab> auto-realización como de costumbre

Esto asume que usted está en el modo de emacs (set -o emacs) y tienen bash_completion configurar sensatez para cd (por ejemplo complete -o nospace -F _cd cd).

Lamentablemente esto no funciona en vi mode (set -o vi) debido a que la línea de comandos de expansión no está disponible entonces.

4voto

user164395 Puntos 31

Para obtener el antiguo behaivior nuevo, utilice el comando

shopt -s direxpand

o se la incluye en su.bashrc

Si utilizas el mismo .bashrc con diferentes versiones de bash, utilizar

if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
    then shopt -s direxpand
fi

0voto

Scott Wilson Puntos 111

Después de escribir la variable de shell

cd $SCRIPT/

tipo Cntrl-Alt-E. Esto expande la variable

cd /home/user/script/

Esto funciona con el EDITOR = vi en Fedora 16.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: