Bagaimana saya bisa memberi tahu bash-pelengkap tab untuk argumen ke skrip Python saya

14

Katakanlah saya punya program hello.py dan satu argumen yang valid untuk itu adalah:

./hello.py autoawesomesauce

Apakah mungkin untuk mengetik:

./hello.py auto[tab]

pada titik mana argumen yang sebagian selesai dikirim ke halo, yang mengenalinya dan kemudian menyelesaikannya di shell untuk:

./hello.py autoawesomesauce

Saya tahu git melakukan sesuatu seperti ini, tetapi bisakah itu dilakukan untuk skrip Python + Bash?

Gilles 'SANGAT berhenti menjadi jahat'
sumber
4
Skrip Python tidak bisa. pesta harus.
memilih untuk apa sebenarnya?

Jawaban:

7

Pada sistem Linux, biasanya Anda dapat menemukan sejumlah besar contoh script di bawah: /etc/bash_completion.d. Jika Anda sumber skrip ini, maka Anda akan mendapatkan perilaku autocomplete.

Saya telah memasukkan contoh dari direktori itu. Ini adalah skrip penyelesaian untuk 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
Bill Lynch
sumber
Apa _get_comp_words_by_ref?
e-info128
4

Fungsi ini tidak ada hubungannya dengan Python. Ini adalah fungsi murni dari shell yang mendasari. Jadi, baca bash docs pada pelengkapan otomatis.

Google untuk "bash penyelesaian otomatis" dan Anda akan menemukan setidaknya 5 dokumen masuk akal di bawah 10 hit pertama.


sumber
Yang artinya mungkin ide yang baik untuk membungkus skrip Python Anda dalam skrip Bash, membiarkan skrip Bash melakukan sebanyak mungkin penanganan argumen / parsing.
Kazark
0

Lihat posting StackOverflow terkait ini .

complete 'your_command' 'p/*/`echo list_of_your_options`/'
pemula
sumber