Imaginez que j'ai une commande 'commande' qui prend les arguments foo: bar foo: foo bar: bar ou bar: foo, je peux écrire un script d'achèvement de ligne de commande que je peux attribuer à mon environnement pour lui donner un achèvement qui ressemble à ce qui suit:
function _command_opt()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="foo:bar foo:foo bar:bar bar:foo"
if [[ ${prev: -7} == 'command' ]]
then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) );
return 0;
fi
}
complete -F _command_opt -o bashdefault -o default 'command'
Cependant, si je tape, les command f[tab][tab]
mots foo: bar et foo: foo sont répertoriés, mais aucun n'est complété sur la ligne de commande (car ils ne sont pas encore distincts. Ce que j'aimerais accomplir, c'est que cela produira command foo:
et laissera mon curseur à la fin de le mot actuel (plutôt que d'ajouter un espace) me permettant de taper ensuite puis / b
ou f
encore tab pour terminer la commande. Le problème exemple est juste pour montrer ce que je veux dire ... le cas réel les combinaisons préfixe: suffixe sont assez longues Par exemple, 25 commandes différentes commençant par le préfixe translationupdateprocess: et translationupdateprocess est l’un des 25 préfixes de longueur égale offrant le même nombre d’options.
Est-ce que quelqu'un connaît un moyen de terminer bash pour fonctionner de cette façon?
la source