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.
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.
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
La solution de contournement suggérée dans http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html est la suivante:
<Tab>
pour compléter automatiquement votre variable d’environnement s.t. votre ligne de commande dit cd $MYVAR
<Esc>
+ <Ctrl>-E
pour développer la ligne de commande actuelle, c.-à-d. remplacez $MYVAR
par sa valeur, le chemin/
et profitez ensuite du <Tab>
complétement automatique comme d'habitudeCela 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à.
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.