Bash-Auto-Vervollständigung für Umgebungsvariablen [geschlossen]

25

Die Funktion zur automatischen Vervollständigung von Bash scheint mit Umgebungsvariablen in 11.04 nicht zu funktionieren. Das aktuelle Verhalten ist unten angegeben

export SCRIPT=/home/user/script
cd $SCRIPT/<tab>

führt dazu, dass ein Backslash ( \) hinzugefügt wird, bevor $SCRIPTdie Eingabeaufforderung angezeigt wird

cd \$SCRIPT/

Dasselbe passiert, wenn cddurch lsoder einen anderen Befehl ersetzt wird

Auch wenn es eine ausführbare Datei im Pfad von $ SCRIPT gibt und ich das ausführen möchte

$SCRIPT/<tab>

Bash zeigt die Optionen im Ordner nicht an (unabhängig davon, ob sich eine einzelne Datei oder mehrere Dateien / Verzeichnisse im Pfad der Umgebungsvariablen befinden).

Mit anderen Worten, die automatische Vervollständigung funktioniert nicht mit Umgebungsvariablen.

Nilchat
quelle
2
Hier ist der Fehler im Launchpad .
idbrii
Ich denke, es hat nichts mit der Bash-Version (4.1 oder 4.2) zu tun. Ich habe gerade bash-4.1 aus den Quellen installiert und anstelle von 4.2.24 (Ubuntu 12.04-Version; aus den Quellen installiert, damit ich das Paket nicht bei jedem Sys-Upgrade zurückhalten muss) und des Verhaltens verwendet ist genau das gleiche. Sehr, sehr nervig ...
4
Diese Frage scheint nicht zum Thema zu gehören, da es sich um einen Fehler in einer alten, nicht unterstützten Version handelt. Der Fehler ist hier beschrieben und wurde in 12.04 und später behoben
Warren Hill
1
@WarrenHill Möglicherweise handelt es sich nicht um ein Thema, da es sich um einen Fehler handelt (und ich habe dafür gestimmt, ihn aus diesem Grund zu schließen). Dass der Fehler in einer nicht unterstützten Version vorliegt, ist jedoch irrelevant. Wir schließen keine alten Fragen , deren Antworten nicht zum Thema gehören, wenn das EoL-Datum der betroffenen Version bekannt wird. Nur neue / unbeantwortete EoL-Fragen sind nicht zum Thema.
Eliah Kagan

Antworten:

13

Dieser Bug wurde in Bash 4.2 eingeführt. Es gibt hier einen langen Thread darüber:

http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html

Kurz gesagt, Chet Ramey, der Entwickler von bash, ist sich noch nicht sicher, wie er das Problem beheben soll.

geirha
quelle
Gibt es eine Möglichkeit, zu Bash 4.1 zurückzukehren?
Nilchat
1
Ein Fix ist auf dem Weg: Chet hat ein "direxpand" -Shopt hinzugefügt, um das alte Verhalten wiederherzustellen. Es ist noch nicht in Oneiric.
Nelson
8
Es ist für mich überraschend, dass sich so wenige Menschen darüber beschwert haben. Es ist eine große Veränderung gegenüber der Art und Weise, wie bash seit einigen Jahren funktioniert.
Scott C Wilson
11

Verwenden Sie den Befehl, um das alte Verhalten wiederherzustellen

shopt -s direxpand

oder binde es in dein ein .bashrc

Wenn Sie dieselbe .bashrc-Datei mit verschiedenen Versionen von bash verwenden, verwenden Sie

if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
    then shopt -s direxpand
fi
user164395
quelle
1
Dieser Test schlägt für Bash 5.0 und 5.1 fehl.
Keith Thompson
8

Die in http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html vorgeschlagene Problemumgehung lautet:

  1. Verwenden Sie <Tab>diese Option, um Ihre Umgebungsvariable in der Befehlszeile automatisch zu vervollständigencd $MYVAR
  2. Drücken Sie <Esc>+ <Ctrl>-E, um die aktuelle Befehlszeile zu erweitern, dh ersetzen Sie $MYVARden Pfad durch seinen Wert
  3. a hinzufügen /und dann <Tab>wie gewohnt die automatische Vervollständigung genießen

Dies setzt voraus, dass Sie sich im Emacs-Modus befinden ( set -o emacs) und dies bash_completionsinnvoll eingerichtet haben cd(z complete -o nospace -F _cd cd. B. ).

Leider funktioniert dies nicht im vi-Modus ( set -o vi), da die Befehlszeilenerweiterung dann nicht verfügbar ist.

kynan
quelle
2

Nachdem Sie die Shell-Variable eingegeben haben

cd $SCRIPT/

Typ Cntrl-Alt-E. Dies erweitert die Variable

cd /home/user/script/

Dies funktioniert mit EDITOR = vi in ​​Fedora 16.

Scott C Wilson
quelle