Comment puis-je dire à bash des tabulations complètes pour les arguments de mon script Python

14

Disons que j'ai un programme hello.py et un argument valable possible est:

./hello.py autoawesomesauce

Il est possible de taper:

./hello.py auto[tab]

à quel point l'argument partiellement complété est envoyé à hello, qui le reconnaît comme tel et le complète ensuite sur le shell pour:

./hello.py autoawesomesauce

Je sais que git fait quelque chose comme ça, mais peut-il être fait pour un script Python + Bash?

Gilles 'SO- arrête d'être méchant'
la source
4
Le script Python ne peut pas. bash doit.
voter pour quoi exactement?

Réponses:

7

Sur les systèmes Linux, vous trouverez généralement un grand nombre d'exemples de scripts sous: /etc/bash_completion.d. Si vous sourcez ces scripts, vous obtiendrez le comportement de saisie semi-automatique.

J'ai inclus un exemple de ce répertoire. Il s'agit du script d'achèvement pour unfar.

_unrar()
{
    local cur

    COMPREPLY=()
    _get_comp_words_by_ref cur

    if [[ "$cur" == -* ]] ; then
        COMPREPLY=( $( compgen -W '-ad -ap -av- -c- -cfg- -cl -cu \
            -dh -ep -f -idp -ierr -inul -kb -o+ -o- -ow -p -p- -r -ta \
            -tb -tn -to -u -v -ver -vp -x -x@ -y' -- "$cur" ) )
    else
        if [ $COMP_CWORD -eq 1 ]; then
            COMPREPLY=( $( compgen -W 'e l lb lt p t v vb vt x' -- "$cur" ) )
        else
            _filedir '@(rar|RAR)'
        fi
    fi

} &&
complete -F _unrar -o filenames unrar
Bill Lynch
la source
Qu'est-ce que c'est _get_comp_words_by_ref?
e-info128
4

Cette fonctionnalité n'a rien à voir avec Python. Il s'agit d'une pure fonctionnalité de la coque sous-jacente. Lisez donc les documents bash sur l'auto-complétion.

Google pour "auto-complétion bash" et vous trouverez au moins 5 documents raisonnables sous les 10 premiers hits.


la source
Ce qui signifie que ce peut être une bonne idée d'encapsuler votre script Python dans un script Bash, laissant le script Bash faire autant de gestion / analyse d'arguments que possible.
Kazark
0

Voir ce post StackOverflow associé.

complete 'your_command' 'p/*/`echo list_of_your_options`/'
débutant
la source