Wie kann ich meinem Python-Skript in der Bash gültige Tab-Vervollständigungen für Argumente mitteilen?

14

Angenommen, ich habe ein Programm hello.py und ein mögliches gültiges Argument dafür ist:

./hello.py autoawesomesauce

Es ist möglich einzutippen:

./hello.py auto[tab]

An diesem Punkt wird das teilweise vervollständigte Argument an hallo gesendet, das es als solches erkennt und es dann auf der Shell vervollständigt, um:

./hello.py autoawesomesauce

Ich weiß, dass git so etwas macht, aber kann es für ein Python-Skript + Bash gemacht werden?

Gilles 'SO - hör auf böse zu sein'
quelle
4
Das Python-Skript kann nicht. Bash muss.
wofür genau upvote?

Antworten:

7

Auf Linux - Systemen können Sie in der Regel eine große Anzahl von Beispielskripten finden Sie unter: /etc/bash_completion.d. Wenn Sie diese Skripte als Quelle verwenden, erhalten Sie das Verhalten der automatischen Vervollständigung.

Ich habe ein Beispiel aus diesem Verzeichnis eingefügt. Dies ist das Abschlussskript für 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
quelle
Was ist _get_comp_words_by_ref?
e-info128
4

Diese Funktionalität hat nichts mit Python zu tun. Dies ist eine reine Funktionalität der Unterlegschale. Lesen Sie daher die Bash-Dokumente zur automatischen Vervollständigung.

Google für "Bash Auto-Vervollständigung" und Sie finden mindestens 5 vernünftige Dokumente unter den ersten 10 Treffer.


quelle
Das heißt, es ist möglicherweise eine gute Idee, Ihr Python-Skript in ein Bash-Skript zu verpacken, damit das Bash-Skript so viele Argumente wie möglich verarbeitet und analysiert.
Kazark
0

Siehe diesen verwandten StackOverflow-Beitrag.

complete 'your_command' 'p/*/`echo list_of_your_options`/'
Neuling
quelle