Як я можу визначити дійсні доповнення bash для аргументів до мого сценарію Python


14

Скажіть, у мене є програма hello.py, і один можливий вірний аргумент до неї:

./hello.py autoawesomesauce

Можна ввести:

./hello.py auto[tab]

в цей момент частково завершений аргумент надсилається привіт, який розпізнає його як такий, а потім завершує його на оболонці для:

./hello.py autoawesomesauce

Я знаю, що git робить щось подібне, але чи можна це зробити для сценарію Python + Bash?


4
Сценарій Python не може. баш треба.

підняти для чого саме?

Відповіді:


7

У системах Linux, зазвичай можна знайти велику кількість прикладів скриптів під: /etc/bash_completion.d. Якщо ви джерелом цих сценаріїв, ви отримаєте поведінку автозаповнення.

Я включив приклад із цього каталогу. Це сценарій завершення для 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

Що таке _get_comp_words_by_ref?
e-info128

4

Ця функціональність не має нічого спільного з Python. Це чистий функціонал нижньої оболонки. Тому прочитайте документи bash щодо автоматичного завершення.

Google для "автоматичного завершення", і ви знайдете щонайменше 5 розумних документів під першими 10 зверненнями.


Це означає, що може бути гарною ідеєю обернути ваш скрипт Python в Bash-скрипт, дозволяючи сценарію Bash робити максимально обробку / розбір аргументів.
Казарк

0

Дивіться цю пов’язану публікацію StackOverflow.

complete 'your_command' 'p/*/`echo list_of_your_options`/'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.