Wie kann man Bash dazu bringen, das Escapen von $ während der Tab-Vervollständigung zu unterlassen?

Wie kann man Bash dazu bringen, das Escapen von $ während der Tab-Vervollständigung zu unterlassen?

Ich habe dies in der Befehlszeile:

ln -sf $PWD/wine-

und dann drücke ich, Tabum den Dateinamen zu vervollständigen. In früheren Versionen von Ubuntu funktionierte dies problemlos, um den wine-Dateinamen zu vervollständigen (und als Nebeneffekt $PWDwurde er zu diesem Zeitpunkt erweitert). Aber jetzt wird es zu

ln -sf \$PWD/wine-

das ist überhaupt nicht das, was ich meinte, und vervollständigt nichts, da die Datei nicht wörtlich mit beginnt $.

Wie führe ich die Vervollständigung wieder zum weniger fehlerhaften Verhalten zurück?

setsagt mir, dass dies meine aktuellen Einstellungen sind:

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

Antwort1

Ich habe festgestellt, dassBash-Versionen >= 4.2.29habe eine neue direxpandShopt-Einstellung. (Schauen Sie nach, man docs/bash.1ob Sie eine neue Bash ausprobieren, oder sehen Siebash.1 ab Zeile 8951)

Wenn Sie Quantal Quetzal 12.10 verwenden oder auf andere Weise eine neue Bash erhalten (oder auschecken und erstellen), gilt Folgendes:

shopt -s direxpand

Verleiht mir das Verhalten, das ich will, brauche und liebe.

Problemumgehung: In der Zwischenzeit macht Ctrl+ Alt+ Estatt Tabauch, was ich will. Ist aber umständlich.

Übrigens, es gibt mehrere Threads mit dem Titel "Bash Tab Variable Expansion Frage?" ingnu.bash.fehler. Beim Lesen habe ich die Informationen hier gefunden.

Antwort2

shopt -u progcomp

Dadurch wurde das Problem für mich behoben und auch viele „intelligente“ Vervollständigungsoptionen entfernt, die meiner Erfahrung nach störend sind, da sie Dateien nicht vervollständigen, von denen ich weiß, dass sie da sind, weil das blöde Ding denkt, ich möchte sie nicht als Argumente für einen bestimmten Befehl. ARRRGH

Antwort3

Suchen Sie _filedir()im obersten bash_completion-Skript und ändern Sie die Zeile

compopt -o filenames 2>/dev/null

Zu

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

Antwort4

Diejenigen (wie ich) mit 12.04 können ~+ statt $PWD verwenden …

Zum Beispiel :

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

verwandte Informationen