Come posso dire a bash i completamenti di tab validi per argomenti sul mio script Python


14

Supponiamo che io abbia un programma hello.py e un possibile argomento valido è:

./hello.py autoawesomesauce

È possibile digitare:

./hello.py auto[tab]

a quel punto l'argomento parzialmente completato viene inviato a hello, che lo riconosce come tale e quindi lo completa sulla shell per:

./hello.py autoawesomesauce

So che git fa qualcosa del genere, ma può essere fatto per uno script Python + Bash?


4
Lo script Python non può. bash deve.

voto per cosa esattamente?

Risposte:


7

Sui sistemi Linux, si può generalmente trovare un gran numero di script di esempio sotto: /etc/bash_completion.d. Se si procurano questi script, si otterrà il comportamento di completamento automatico.

Ho incluso un esempio da quella directory. Questo è lo script di completamento per unrar.

_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

Che cosa è _get_comp_words_by_ref?
e-info128,

4

Questa funzionalità ha zero a che fare con Python. Questa è una pura funzionalità della shell sottostante. Quindi leggi i documenti di bash sul completamento automatico.

Google per "bash auto-completamento" e troverai almeno 5 documenti ragionevoli nei primi 10 risultati.


Ciò significa che potrebbe essere una buona idea avvolgere il tuo script Python in uno script Bash, lasciando che lo script Bash esegua il maggior numero possibile di argomenti / analisi.
Kazark,

0

Vedi questo post StackOverflow correlato.

complete 'your_command' 'p/*/`echo list_of_your_options`/'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.