Comment les outils de ligne de commande ont-ils leur propre liste de saisie semi-automatique?

24

Comment Bash dans Ubuntu connaît-il la liste d'actions spécifique d'un outil?

Par exemple, si je tape apt-get et tab deux fois, je ne vois que supprimer, mettre à jour, mettre à niveau ... etc, mais pas les actions pour une autre commande ou les fichiers dans le répertoire en cours.

Je développe un outil de ligne de commande dans Go et je voudrais fournir cette fonctionnalité pour les distributions qui le prennent en charge.

Amged Rustom
la source
1
J'ai supprimé "ubuntu" de votre titre et de vos tags car c'est mieux comme question plus générale (la réponse n'est spécifique à aucune distribution).
goldilocks
1
Excellente question, je me suis souvent posé la question, mais je n'ai jamais pris le temps de la rechercher.
akatakritos

Réponses:

25

Il le fait en utilisant les fonctionnalités de complétion de bash v4. Le code d'achèvement pour apt-getest fourni par le bash-completionpackage et se trouve à l' adresse /usr/share/bash-completion/completions/apt-get. Les applications terminées et ne faisant pas partie du bash-completionpackage de base placent leurs scripts de fin dans /etc/bash_completion.d.

Les finitions sont chargées via le sourcing /etc/bash_completion. L'endroit exact où cela se fera variera selon les versions de Debian ou d'Ubuntu. Cela, à son tour, fournira tout dans /usr/share/bash-completion/completionset /etc/bash_completion.d.

jordanm
la source
Merci, ça l'explique. Donc, l'implémentation varie non seulement de Debian à Ubuntu, mais aussi dans chaque version de la même distribution?
Amged Rustom
1
@Amgad Cela fonctionne de la même manière sur toutes les distributions. Les seules différences concernent l'emplacement des fichiers et peut-être certains paramètres par défaut.
Gilles 'SO- arrête d'être méchant'