¿Cómo puedo decirle a bash las finalizaciones de tabulación válidas para los argumentos de mi script Python?

14

Digamos que tengo un programa hello.py y un posible argumento válido es:

./hello.py autoawesomesauce

Es posible escribir:

./hello.py auto[tab]

en ese punto, el argumento parcialmente completado se envía a hola, que lo reconoce como tal y luego lo completa en el shell para:

./hello.py autoawesomesauce

Sé que git hace algo como esto, pero ¿se puede hacer para un script de Python + Bash?

Gilles 'SO- deja de ser malvado'
fuente
44
El script Python no puede. bash must.
¿Voto por qué exactamente?

Respuestas:

7

En los sistemas Linux, por lo general puede encontrar un gran número de scripts de ejemplo en: /etc/bash_completion.d. Si obtiene estos scripts, obtendrá el comportamiento de autocompletar.

He incluido un ejemplo de ese directorio. Este es el script de finalización para 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
fuente
¿Qué es _get_comp_words_by_ref?
e-info128
4

Esta funcionalidad tiene cero que ver con Python. Esta es una funcionalidad pura del shell subyacente. Entonces lea los documentos de bash sobre autocompletar.

Google para "bash auto-complete" y encontrará al menos 5 documentos razonables en los primeros 10 hits.


fuente
Lo que significa que puede ser una buena idea envolver su secuencia de comandos Python en una secuencia de comandos Bash, permitiendo que la secuencia de comandos Bash realice la mayor cantidad de manejo / análisis de argumentos posible.
Kazark
0

Vea esta publicación relacionada de StackOverflow.

complete 'your_command' 'p/*/`echo list_of_your_options`/'
novato
fuente