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.

Wuffers
la source
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.

Grawity
la source
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

dogbane
la source
7

Vous voudrez peut-être regarder de plus près à l'intérieur de votre répertoire /etc/bash_completion.d sur votre système.

Vous devriez également lire cette introduction . La deuxième partie de l'introduction est celle dont vous avez besoin.

AlexTheBird
la source
1
J'utilise Mac OS X 10.6, donc il n'y a pas de répertoire
Ah ok, bon à savoir.
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.

dcc310
la source