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?


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

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.


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`/'
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.