74 votes

Comment faire en sorte que bash arrête d'échapper les $ lors de la complétion de la tabulation ?

J'ai ceci sur la ligne de commande :

ln -sf $PWD/wine-

et ensuite j'ai frappé Tab pour compléter le nom du fichier. Dans les versions précédentes d'Ubuntu, cela fonctionnait très bien pour compléter le nom de fichier. wine- nom de fichier (et comme effet secondaire $PWD serait élargi à ce moment-là). Mais maintenant, il se transforme en

ln -sf \$PWD/wine-

ce qui n'est pas du tout ce que je voulais dire et ne complète rien puisque le fichier ne commence pas littéralement par $ .

Comment faire pour que l'achèvement revienne à un comportement moins cassé ?

set me dit que ce sont mes paramètres actuels :

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor

71voto

Peter V. Mørch Points 4081

J'ai découvert que versions de bash >= 4.2.29 ont un nouveau direxpand réglage de la boutique. (Voir man docs/bash.1 si vous vérifiez un nouveau bash, ou si vous voyez bash.1 à partir de la ligne 8951 )

Si l'on utilise Quantal Quetzal 12.10 ou si l'on met la main sur un nouveau bash (ou si l'on vérifie et construit), alors.. :

shopt -s direxpand

Il me donne le comportement que je veux, dont j'ai besoin et que j'aime.

Solution de rechange : En attendant, Ctrl + Alt + E au lieu de Tab fait ce que je veux aussi. Mais c'est gênant.

BTW, Il y a plusieurs fils de discussion intitulés "bash tab variable expansion question ?" dans gnu.bash.bug . En les lisant, j'ai trouvé l'information ici.

30voto

user3080602 Points 431
shopt -u progcomp

Cela a réglé le problème pour moi, cela a également supprimé un grand nombre d'options de complétion "intelligentes" que j'ai trouvé dans le chemin en ne complétant pas les fichiers que je sais être là parce que cette chose stupide pense que je ne les veux pas comme arguments à une commande particulière. ARRRGH

4voto

mba Points 41

Recherche _filedir() dans le haut niveau bash_completion script et changez la ligne

compopt -o filenames 2>/dev/null

à

compopt -o filenames -o noquote 2>/dev/null

4voto

rsn86 Points 61

Sur GNU bash, version 4.2.46(2)-release, les options complete_fullquote y noquote ne sont pas disponibles. Le site cdable_vars L'option fonctionne sur cd seulement ; direxpand développe la variable.

Ce qui a le mieux marché pour moi, c'est :

shopt -u progcomp

Cela a fonctionné sur d'autres commandes, en plus de cd en préservant les variables au lieu de les étendre.

2voto

Kevin Reid Points 8806

Pour ceux (comme moi) avec 12.04 peuvent utiliser ~+ au lieu de $PWD...

par exemple :

cd /bin
echo ~+/ls
/bin/ls

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X