Jak mogę powiedzieć bashowi prawidłowe uzupełnienia tabulatorami dla argumentów w moim skrypcie Python

14

Powiedzmy, że mam program hello.py, a jednym z możliwych poprawnych argumentów jest:

./hello.py autoawesomesauce

Można wpisać:

./hello.py auto[tab]

w tym momencie częściowo zakończony argument jest wysyłany do hello, który rozpoznaje go jako taki, a następnie uzupełnia go w powłoce, aby:

./hello.py autoawesomesauce

Wiem, że git robi coś takiego, ale czy można to zrobić dla skryptu Python + Bash?

Gilles „SO- przestań być zły”
źródło
4
Skrypt w języku Python nie może. bash musi.
głosować za co dokładnie?

Odpowiedzi:

7

W systemach Linux, można zazwyczaj znaleźć dużą liczbę przykładowych skryptów pod adresem: /etc/bash_completion.d. Jeśli prześlesz te skrypty, uzyskasz zachowanie autouzupełniania.

Podałem przykład z tego katalogu. To jest skrypt ukończenia dla 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
źródło
Co to jest _get_comp_words_by_ref?
e-info128
4

Ta funkcja nie ma nic wspólnego z Pythonem. Jest to czysta funkcjonalność powłoki podkładowej. Przeczytaj więc dokumenty bash dotyczące automatycznego uzupełniania.

Google za „automatyczne uzupełnianie bash”, a pod pierwszymi 10 trafieniami znajdziesz co najmniej 5 rozsądnych dokumentów.


źródło
Co oznacza, że ​​dobrym pomysłem może być owijanie skryptu Python w skrypt Bash, pozwalając skryptowi Bash na możliwie największą obsługę argumentów / parsowanie.
Kazark,
0

Zobacz ten powiązany post StackOverflow.

complete 'your_command' 'p/*/`echo list_of_your_options`/'
Nowicjusz
źródło