Wie bekomme ich Bash, um zu verhindern, dass $ während der Tab-Vervollständigung entweicht?

38

Ich habe das auf der Kommandozeile:

ln -sf $PWD/wine-

und dann habe ich getroffen Tab, um den Dateinamen zu vervollständigen. In früheren Versionen von Ubuntu funktionierte dies einwandfrei, um den wine-Dateinamen zu vervollständigen (und als Nebeneffekt $PWDwürde dies zu diesem Zeitpunkt erweitert werden). Aber jetzt dreht es sich um

ln -sf \$PWD/wine-

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

Wie komme ich zum weniger kaputten Verhalten zurück?

set sagt mir, das sind meine aktuellen Einstellungen:

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
keturn
quelle
2
Wenn Sie von diesem Fehler betroffen sind, sollten Sie unter der folgenden URL abstimmen (Anmeldung erforderlich): bugs.launchpad.net/ubuntu/+source/bash/+bug/778627/…
cripton

Antworten:

36

Ich habe festgestellt, dass bash-Versionen> = 4.2.29 eine neue direxpandshopt-Einstellung haben. (Sehen man docs/bash.1Sie, ob Sie eine neue Bash auschecken oder ob Sie Bash.1 aus Zeile 8951 sehen. )

Wenn man Quantal Quetzal 12.10 verwendet oder auf andere Weise einen neuen Bash ergreift (oder auscheckt und baut), dann:

shopt -s direxpand

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

Umgehung: In der Zwischenzeit Ctrl+ Alt+ Estatt Tabtut , was ich auch will. Ist aber umständlich.

Übrigens, es gibt mehrere Threads, die als "Bash-Tab-Variablenerweiterungsfrage" bezeichnet werden. in gnu.bash.bug . Nachdem ich sie gelesen hatte, fand ich die Informationen hier.

Peter V. Mørch
quelle
2
Eine Version von Bash mit Direxpand macht sich auf den Weg nach Precise (12.04): Siehe bugs.launchpad.net/bugs/778627
keturn
7
Wäre noch besser, wenn ich meinen riesigen Pfad nicht erweitern und eine nicht maskierte Variable mit der Fertigstellung weiterverwenden könnte.
Josxyqk
@jozxyqk Hast du jemals einen Weg gefunden, diese No-Path-Expansion-Funktion zu bekommen?
Ungeheuer
@Ungeheuer Ich verwende derzeit Bash 4.4.19auf Ubuntu 18.04 und es funktioniert einfach. Ich bin mir nicht sicher, wann sich das geändert hat.
Jozxyqk
2

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

compopt -o filenames 2>/dev/null

zu

compopt -o filenames -o noquote 2>/dev/null
mba
quelle
In 12.04 GNU bash, Version 4.2.25, ergibt dieser Vorschlag den Fehler:compopt: noquote: invalid option name
arielf
1

Für diejenigen (wie ich) mit 12.04 kann ~ + anstelle von $ PWD verwenden ...

beispielsweise :

cd /bin
echo ~+/ls
/bin/ls
Tony
quelle
1

Selbst mit der aktualisierten Bash habe ich festgestellt, dass $immer noch entkommen wird.

  • bash-completion (1:2.1-3.fc20)Paket entfernen
  • oder einfach nur die Beschaffung nicht /etc/bashrcaus ~/.bashrcschien es zu beheben.

Ich vermute, dass mir jetzt einige Funktionen fehlen, an die ich normalerweise gewöhnt bin, die ich aber noch nicht bemerkt habe.


Alternativ (zumindest für Fedora 26) export BASH_COMPLETION_VERSINFO=0vor dem Einkauf hinzufügen /etc/bashrc. Dies lässt das problematische Skript denken, dass es bereits bezogen wurde.

jozxyqk
quelle
0

Das Deaktivieren der Shell-Option 'complete_fullquote' erledigt die Aufgabe:

shopt -u complete_fullquote
Michael Ryan
quelle
$ shopt -u complete_fullquote -bash: shopt: complete_fullquote: ungültiger Shell-Optionsname
Anton Gorev
0
shopt -u progcomp

Dies hat es für mich behoben und auch viele "intelligente" Vervollständigungsoptionen beseitigt, die mir durch das Nicht-Vervollständigen von Dateien, von denen ich weiß, dass sie dort sind, im Weg stehen, weil das Dumme denkt, ich möchte sie nicht als Argumente für ein bestimmtes Objekt Befehl. ARRRGH

user3080602
quelle