Wie verfügen Befehlszeilenprogramme über eine eigene Autocomplete-Liste?

24

Woher kennt Bash in Ubuntu die spezifische Liste der Aktionen eines Tools?

Wenn ich zum Beispiel apt-get und tab zweimal eingebe, sehe ich nur das Entfernen, Aktualisieren, Aktualisieren usw., aber nicht die Aktionen für einen anderen Befehl oder die Dateien im aktuellen Verzeichnis.

Ich entwickle ein Befehlszeilentool in Go und möchte dieses Feature für die Distributionen bereitstellen, die es unterstützen.

Amged Rustom
quelle
1
Ich habe "ubuntu" aus Ihrem Titel und Ihren Tags entfernt, da dies eine allgemeinere Frage ist (die Antwort ist für keine Distribution spezifisch).
Goldlöckchen
1
Gute Frage, das habe ich mich oft gefragt, aber ich habe mir nie die Zeit genommen, es nachzuschlagen.
Akatakritos

Antworten:

25

Hierzu werden die Vervollständigungsfunktionen von bash v4 verwendet. Der Beendigungscode für apt-getwird vom bash-completionPaket bereitgestellt und befindet sich unter /usr/share/bash-completion/completions/apt-get. Anwendungen, die abgeschlossen sind und nicht Teil des bash-completionBasispakets sind, platzieren ihre Abschlussskripte in /etc/bash_completion.d.

Die Abschlüsse werden über das Sourcing geladen /etc/bash_completion. Wo genau dies gemacht wird, hängt von der Debian- oder Ubuntu-Version ab. Das wiederum wird alles in /usr/share/bash-completion/completionsund beziehen /etc/bash_completion.d.

Jordanien
quelle
Danke, das erklärt es. Die Implementierung variiert also nicht nur von Debian zu Ubuntu, sondern auch in jeder Version derselben Distribution?
Amged Rustom
1
@Amgad Bei allen Distributionen funktioniert es auf die gleiche Weise. Die einzigen Unterschiede sind der Speicherort der Dateien und möglicherweise einige Standardeinstellungen.
Gilles 'SO - hör auf, böse zu sein'