it-swarm.com.de

Die Tab-Vervollständigung funktioniert bei Befehlen nicht

Ich versuche, die Tab-Vervollständigung für Befehle in Ubuntu 11.04 Beta 1 zu verwenden und führe die neuesten Updates aus, aber es scheint nicht zu funktionieren. (Obwohl die Paket-Bash-Vervollständigung installiert ist)

Die Tab-Vervollständigung funktioniert nur für Verzeichnisse oder Dateien ordnungsgemäß.

Irgendwelche Ideen, wo man gräbt?

49
Screatch

Überprüfen Sie, ob Sie das folgende Fragment in Ihrer .bashrc haben (sollte standardmäßig vorhanden sein)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
65
Adam Byrtek

Ich dachte, ich würde auch die folgende zusätzliche Erklärung für ein Versagen der Bash-Vervollständigung hinzufügen - sie ist zu lang für einen Kommentar und kann für jemanden nützlich sein, der ein Problem mit der Bash-Vervollständigung hat, da dies vermutlich die 'allgemeine' kanonische Frage ist, auf die sich diese Frage bezieht Alle Duplikate werden referiert.

Auch wenn Sie die entsprechende Zeile in Ihrem .bashrc (wie in der obigen Antwort) und dem bash-completion -Paket installiert haben, kann die Bash-Vervollständigung dennoch fehlschlagen, wenn Sie entweder shopt -s nullglob oder shopt -s failglob in Ihrem .bashrc oder .bash_aliases.

Die folgenden Szenarien wurden getestet, wobei alle Benutzeranpassungen von .bashrc und .bash_aliases entfernt wurden, um einen fairen Test zu ergeben, wobei die entsprechende Bash-Vervollständigungszeile in .bashrc vorhanden und bash-completion installiert war.

1) Das erste Szenario ist, wenn Sie shopt -s failglob in Ihrem .bashrc oder .bash_aliases haben.

Beim Versuch, vollständige Verzeichnisse bzw. Dateien zu tabulieren, treten folgende Fehler auf:

cd Dbash: no match: "${COMP_WORDS[@]}"  
cat pabash: no match: words[0]=${!ref}${COMP_WORDS[i]}

Befehle werden jedoch weiterhin erfolgreich ausgeführt.

2) Wenn shopt -s nullglob aktiviert ist, führt der Versuch, ein Verzeichnis oder eine Datei auf der Registerkarte zu vervollständigen, stattdessen dazu, dass alles aufgelistet wird, ohne dass dies abgeschlossen ist:

cd Do
.Adobe/                  .gimp-2.6/               Podcasts/
.aptitude/               .gnome2/                 Public/
.audacity-data/          .gnome2_private/         .Pulse/
............

Ich habe die Auflistung hier gekürzt, da es sehr lang war und nicht notwendig ist, alles zu reproduzieren.

Wieder funktioniert die Befehlsausführung jedoch weiterhin.

Wenn Sie also nur shopt -s failglob oder shopt -s nullglob entfernen, können Sie auch das Problem der Bash-Vervollständigung lösen, vorausgesetzt, Sie haben die entsprechende Zeile in Ihrem .bashrc und bash-completion installiert.

13
user76204

Zusätzlich zum Ändern der /etc/bash.bashrc -Datei (siehe andere Antworten) müssen Sie möglicherweise das bash-completion -Paket installieren.

Überprüfen Sie, ob die Datei /etc/bash_completion vorhanden ist. Wenn nein:

Sudo apt-get install bash-completion

(In meiner Installation von Debian 7 war es ursprünglich nicht installiert)

9
SergeanT

So einfach es auch klingen mag, stellen Sie sicher, dass bash Ihre aktive Shell ist

echo $Shell

Ich habe gerade ein Upgrade auf Ubuntu 14.04.1 LTS durchgeführt und hatte keine automatische Tab-Vervollständigung, obwohl ich den Ratschlägen in diesem Beitrag gefolgt war, nur um festzustellen, dass meine Shell auf /bin/sh und nicht auf /bin/bash eingestellt war.

7
nocdib

Update auf Ubuntu 14.04.01

Überprüfen Sie, ob Sie das folgende Fragment in Ihrer .bashrc haben (sollte standardmäßig vorhanden sein)

Sudo vim /etc/bash.bashrc (geben Sie "i" ein, um die Datei zu bearbeiten)

    # enable bash completion in interactive shells
    if ! shopt -oq posix; then
     if [ -f /usr/share/bash-completion/bash_completion ]; then
        . /usr/share/bash-completion/bash_completion
      Elif [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
      fi
    fi

7 Zeilen oben auskommentieren

Datei speichern "esc + w + q + enter"

Starten Sie bash neu

exec bash

1
Diego Arriola