Wie werden Optionen für die automatische Vervollständigung durch TAB gefunden?

33

Und wie werden auch Aliase automatisch vervollständigt?

theTuxRacer
quelle

Antworten:

22

Abhängig vom Befehl:

  • Möglicherweise hat jemand eine Funktion geschrieben, um mögliche Vervollständigungen von Argumenten, einschließlich Optionen, zu generieren. Sie finden Funktionen für einige Befehle in /etc/bash_completion.d/*(oder an einem anderen Ort auf einigen Systemen). Diese Funktionen sind beim eingebauten System registriert (z. B. weist bash an, die Funktion aufzurufen , wenn Sie auf einen Befehl drücken ). Sie verwenden die eingebaute Funktion, um bash mitzuteilen, dass "hier die möglichen Vervollständigungen sind".complete complete -F _find find_findTabfindcompgen
  • Bei einigen Befehlen ruft bash den Befehl mit dem Argument auf --helpund analysiert die Ausgabe. Solche Befehle können mit dem completeeingebauten registriert werden , z complete -F _longopt ls. _longoptist in der Tat eine Funktion zur Erstellung von Abschlüssen, die die Ausgabe eines Befehls analysiert, anstatt eine feste Liste zu verwenden. (Es gibt andere speziellere Vervollständigungsfunktionen, die die Ausgabe eines Befehls analysieren, um mögliche Vervollständigungen zu generieren. Schauen Sie sich /etc/bash_completion.d/*Beispiele an.)
  • Bei Dingen wie Aliasen schlägt die Vervollständigungsfunktion sie in den internen Tabellen von bash nach. Das completeeingebaute hat dafür Optionen, zB -Afür Aliase.
Gilles 'SO - hör auf böse zu sein'
quelle
10

Schauen Sie sich die Datei an

/ etc / bash_completion

und beobachte die Dateien aus dem Verzeichnis:

/etc/bash_completion.d

Sie finden die Antwort.

SHW
quelle
2

Unterstützung für die Bash-Vervollständigung wird in Debian und Ubuntu durch das Bash-Vervollständigungspaket bereitgestellt . Außerdem müssen Sie in der Regel die folgenden Kommentare entfernen /etc/bash.bashrcund / oder .bashrcdie Bash-Abschlussdateien als Quelle verwenden. Folgendes kommt von /etc/bash.bashrc:

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

damit dies funktioniert. Normalerweise kommentiere ich beides aus. Der Umgang mit interaktiven / Login-Shells in Debian ist ein bisschen chaotisch.

Ähnliche Kommentare gelten vermutlich für andere Distributionen, obwohl sie möglicherweise standardmäßig das Sourcing aktivieren.

Faheem Mitha
quelle