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 / bou fencore 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?