web-dev-qa-db-fra.com

Bash auto complete pour les variables d'environnement

La fonctionnalité d'autocomplétion de bash ne semble pas fonctionner avec les variables d'environnement dans 11.04. Le comportement actuel est indiqué ci-dessous

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

entraîne l’ajout d’une barre oblique inverse (\) avant le $SCRIPT, c’est-à-dire que l’invite devient

cd \$SCRIPT/

La même chose se produit si cd est remplacé par ls ou par une autre commande.

De plus, s’il existe un fichier exécutable dans le chemin contenu dans $ SCRIPT et que je veux l’exécuter

$SCRIPT/<tab>

Bash n'affiche pas les options à l'intérieur du dossier (qu'il y ait un seul fichier ou plusieurs fichiers/répertoires à l'intérieur du chemin contenu dans les variables d'environnement).

En d'autres termes, la saisie semi-automatique ne fonctionne pas avec les variables d'environnement.

25
nilchat

Ce bogue a été introduit dans bash 4.2. Il y a un long fil à ce sujet ici:

http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html

En bref, Chet Ramey, le développeur de bash, ne sait pas encore comment le réparer.

13
geirha

Pour récupérer l'ancien comportement, utilisez la commande

shopt -s direxpand

ou l'inclure dans votre .bashrc

Si vous utilisez le même fichier .bashrc avec différentes versions de bash, utilisez

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

La solution de contournement suggérée dans http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html est la suivante:

  1. utilisez <Tab>pour compléter automatiquement votre variable d’environnement s.t. votre ligne de commande dit cd $MYVAR
  2. appuyez sur <Esc> + <Ctrl>-E pour développer la ligne de commande actuelle, c.-à-d. remplacez $MYVAR par sa valeur, le chemin
  3. ajoutez un / et profitez ensuite du <Tab> complétement automatique comme d'habitude

Cela suppose que vous êtes en mode emacs (set -o emacs) et que bash_completion est correctement configuré pour cd (par exemple, complete -o nospace -F _cd cd).

Malheureusement, cela ne fonctionne pas en mode vi (set -o vi) car le développement en ligne de commande n'est pas disponible à ce moment-là.

8
kynan

Après avoir tapé la variable shell

cd $SCRIPT/

tapez Ctrl-Alt-E. Cela élargit la variable

cd /home/user/script/

Cela fonctionne avec EDITOR = vi dans Fedora 16.

2
Scott C Wilson