Как я могу сказать bash правильные дополнения табуляции для аргументов моего скрипта Python


14

Скажем, у меня есть программа hello.py и один возможный допустимый аргумент:

./hello.py autoawesomesauce

Можно набрать:

./hello.py auto[tab]

в этот момент частично завершенный аргумент отправляется hello, который распознает его как таковой и затем завершает его в оболочке:

./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. Это чистая функциональность лежащей в основе оболочки. Так что читайте документацию по автозаполнению.

Google для "автозаполнения Bash", и вы найдете по крайней мере 5 разумных документов под первые 10 хитов.


Это означает, что может быть хорошей идеей обернуть ваш Python-скрипт в Bash-скрипт, позволяя Bash-скрипту выполнять как можно больше обработки / анализа аргументов.
Казарк,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.