Python betiğime bağımsız değişkenler için bash geçerli sekme tamamlamalarını nasıl söyleyebilirim


14

Ben bir program hello.py ve olası bir geçerli argüman var diyelim:

./hello.py autoawesomesauce

Yazmak mümkün:

./hello.py auto[tab]

bu noktada kısmen tamamlanmış argüman merhaba gönderilir, bu da onu böyle tanır ve ardından kabukta tamamlar:

./hello.py autoawesomesauce

Git'in böyle bir şey yaptığını biliyorum, ama bir Python betiği + Bash için yapılabilir mi?


4
Python betiği yapamaz. bash gerekir.

tam olarak ne için oy verin?

Yanıtlar:


7

Linux sisteminde, genellikle altında örnek komut çok sayıda bulabilirsiniz: /etc/bash_completion.d. Bu komut dosyalarını kaynak yaparsanız, otomatik tamamlama davranışını alırsınız.

Bu dizinden bir örnek ekledim. Bu unrar için tamamlama betiğidir.

_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

Nedir _get_comp_words_by_ref?
e-info128

4

Bu işlevin Python ile hiçbir ilgisi yoktur. Bu, alt katman kabuğunun saf bir işlevselliğidir. Otomatik tamamlamada bash dokümanlarını okuyun.

Google "bash otomatik tamamlama" için ilk 10 isabet altında en az 5 makul doküman bulacaksınız.


Bu, Python komut dosyanızı bir Bash komut dosyasına sarmak ve Bash komut dosyasının mümkün olduğunca fazla argüman işleme / ayrıştırma yapmasına izin vermek iyi bir fikir olabilir.
Kazark

0

Bu ilgili StackOverflow yayınına bakın .

complete 'your_command' 'p/*/`echo list_of_your_options`/'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.