L'autocomplétion comporte deux parties :
-
La bibliothèque readline, comme déjà mentionné par fixje, gère l'édition de la ligne de commande, et rappelle à bash lorsque la touche tab est pressée, pour permettre la complétion. Bash donne alors (voir point suivant) une liste de complétions possibles, et readline insère autant de caractères que ceux identifiés sans ambiguïté par les caractères déjà tapés. (Vous pouvez configurer la bibliothèque readline de manière assez large, voir la section Edition en ligne de commande du manuel Bash pour plus de détails).
-
Bash a lui-même la fonction intégrée complete
pour définir un mécanisme d'achèvement pour les commandes individuelles. Si rien n'est défini pour la commande actuelle, elle utilise la complétion par le nom du fichier (en utilisant opendir/readdir, comme l'a dit Ignacio).
La partie permettant de définir vos propres complétions est décrite dans la section Achèvement programmable . En bref, avec complete «options» «command»
vous définissez l'achèvement d'une commande. Par exemple complete -u su
dit en complétant un argument pour le su
recherche les utilisateurs du système actuel .
Si cela est plus compliqué que le options normales peuvent couvrir (par exemple, différentes complétions en fonction de l'index de l'argument, ou en fonction des arguments précédents), vous pouvez utiliser -F function
qui invoquera ensuite une fonction shell pour générer la liste des compléments possibles. (Ceci est utilisé par exemple pour la complétion de git, qui est très compliquée, dépendant de la sous-commande et parfois des options données, et utilisant parfois les noms des branches (qui sont souvent des noms d'utilisateurs). des options données, et utilisant parfois les noms des branches (qui ne sont pas connus de bash).
Vous pouvez lister les complétions existantes définies dans votre environnement bash actuel en utilisant simplement complete
pour avoir une idée de ce qui est possible. Si vous avez installé le paquet bash-completion (ou quel que soit son nom sur votre système), les complétions pour beaucoup de commandes sont installées, et comme Wrikken l'a dit, /etc/bash_completion
contient un script bash qui est ensuite souvent exécuté au démarrage du shell pour le configurer. D'autres script de complétion personnalisés peuvent être placés dans le fichier /etc/bash_completion.d
; ils proviennent tous de /etc/bash_completion
.
3 votes
Vous pouvez vérifier
/etc/bash_completion
(du moins, c'est là que se trouve une grande partie de la magie dans Debian).1 votes
@Wrikken : C'est bash_completion, qui dépend de la complétion de tabulation, mais pas tout à fait de la façon dont cela se produit.
4 votes
Il y a également plusieurs questions sur le *nix stackexchange, notamment : unix.stackexchange.com/questions/4738/ unix.stackexchange.com/questions/1800/custom-autocomplete unix.stackexchange.com/questions/12356/ et au moins un sur SU : superuser.com/questions/289539/custom-bash-tab-completion