Ubuntu 11.04 est sorti depuis le 28 avril 2011. Je ne reviendrai pas ni sur son ergonomie ni sur ses ajouts puisque cela a déjà été débattu sur de nombreux sites/blogs. Cependant, depuis la mise à jour, un point avait tendance à m’agacer.
En effet, dans un shell bash, sur la complétion de la commande ls (entre autre) avec des répertoires contenant des espaces, il ne m’échappait plus ces derniers. Du coup, obligation d’aller les échapper manuellement mais chose encore plus embêtante était qu’il ne me proposait plus le contenu de mon répertoire.
Pire, en échappant les espaces et en utilisant la complétion, il me supprimait mon échappement…
Cet article fournira donc une rapide solution pour corriger ce problème.
Symptôme
Pour l’arborescence ci-dessous, j’avais le comportement suivant :
Utilisation basique de la complétion :
Avec échappement de l’espace…
Avant :
Avec échappement de l’espace…
Avant :
Après exécution de la commande Tab :
Entraînant, bien sûr, une erreur lors de son exécution :
Correctif
Du coup, après une ou deux recherche sur mon ami google, je suis tombé sur le bug suivant.
En fait, pour résumer, il semble que cela vienne du script de complétion utilisé par bash.
Aussi pour corriger ce problème, il ne vous reste plus qu’à éditer le fichier /etc/bash_completion
avec les bons droits et à modifier sa ligne 1587 pour y remplacer default
par filenames
.
# makeinfo and texi2dvi are defined elsewhere.
for i in a2ps awk bash bc bison cat colordiff cp csplit \
curl cut date df diff dir du enscript env expand fmt fold gperf gprof \
grep grub head indent irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
mv netstat nl nm objcopy objdump od paste patch pr ptx readelf rm rmdir \
sed seq sha{,1,224,256,384,512}sum shar sort split strip tac tail tee \
texindex touch tr uname unexpand uniq units vdir wc wget who; do
have $i && complete -F _longopt -o filenames $i
done
unset i
Après un petit coup de rechargement du bashrc
(qui charge le bash_completion
), vous aurez alors résolu votre problème ;-)
Rechargement du ~/.bashrc :
Utilisation basique de la complétion et exécution :
Utilisation de la complétion après complétion du répertoire :
Voilà pour cet article qui, pour une fois, ne parle pas Java mais qui, je l’espère, pourra être utile… ;-)