Achèvement de l'onglet bash personnalisé


34

J'ai mon utilitaire de console personnalisé cooltoolavec une liste d'options

fooOption
barOption

Que dois-je faire pour pouvoir bash compléter automatiquement les options en appuyant sur la tabtouche?

Je veux dire que l'utilisateur a tapé

$ ./cooltool foo_

puis pressé tab. Et alors

$ ./cooltool fooOption _

apparu.


1
Ne traversez pas le poste.
Wuffers

2
Notez que celui-ci est migré et que l'autre ne l'est pas. Je pense que beaucoup d'utilisateurs ne réalisent toujours pas qu'ils ne devraient pas poster de question sur plusieurs sites SE. Ils sont utilisés pour des forums disparates qui ne sont pas un système unifié, où vous pourriez demander dans quelques forums différents une meilleure chance de réponse rapide.
jcrawfordor

Réponses:


2

Écrivez un script d'achèvement bash pour cooltool. Le package bash-compléte est livré avec des scripts pour de nombreux programmes populaires, que vous pouvez utiliser comme exemples.


40

Le moyen le plus simple consiste à ajouter ce qui suit à votre .bashrc.

_cooltool()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "fooOption barOption" -- $cur) )
}
complete -F _cooltool cooltool

Chaque fois que vous tapez cooltool f[TAB][TAB], la _cooltool()fonction est invoquée. Il déterminera quel est votre mot partiel actuel et déterminera ensuite compgenquelles options correspondent. Ceux-ci sont stockés dans un tableau appelé COMPREPLYqui est ensuite affiché. Regardez man completeet man compgenpour plus de détails.

Pour un joli tutoriel, consultez: Écrire votre propre fonction d'achèvement de Bash




2

En plus de la réponse de Dogbane, vous pouvez également faire:

complete -W "fooOption barOption" cooltool

si vous voulez simplement faire correspondre une liste de mots depuis le début de la chaîne. Il semble que complet et compgen partagent la plupart des options. Je n'ai remarqué que "début de chaîne" correspondant dans les commandes que j'utilise, donc j'ai trouvé intéressant que vous puissiez faire d'autres choses dans la fonction _cooltool comme:

COMPREPLY=( $(grep "$cur" ~/my_potential_args.txt) )

pour correspondre n'importe où dans le nom de l'option.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.