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

Что относительно этого:

foo=`{ { cat 1>&3; kill 0; } | { sleep 2; kill 0; } } 3>&1`

Это: выполните производящую вывод команду и sleep в той же группе процесса, группе процесса только для них. Какой бы ни команда возвращается, сначала уничтожает целую группу процесса.

Был бы любой задаваться вопросом: Да, канал не используется; это обошло использование перенаправлений. Единственная цель его состоит в том, чтобы иметь оболочку, выполняет эти два процесса в той же группе процесса.


Как Gilles указал в своем комментарии, это не будет работать в сценарии оболочки, потому что процесс сценария был бы уничтожен наряду с двумя подпроцессами.

Один путь ¹, чтобы вынудить команду работать в отдельной группе процесса состоит в том, чтобы запустить новую интерактивную оболочку:

#!/bin/sh
foo=`sh -ic '{ cat 1>&3; kill 0; } | { sleep 2; kill 0; }' 3>&1 2>/dev/null`
[ -n "$foo" ] && echo got: "$foo" || echo timeouted

Но могли бы быть протесты с этим (например, когда stdin не является tty?). stderr перенаправление там для избавлений от "Завершенного" сообщения, когда интерактивная оболочка уничтожается.

Протестированный с zsh,bash и dash. Но что относительно старых произведений?

B98 предлагает, чтобы следующее изменение, работающее над Mac OS X, с GNU, колотило 3.2.57, или Linux с тире:

foo=`sh -ic 'exec 3>&1 2>/dev/null; { cat 1>&3; kill 0; } | { sleep 2; kill 0; }'`


1. кроме setsid который, кажется, нестандартен.

14
22.04.2011, 22:28
3 ответа

В системах 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
7
27.01.2020, 19:51

Эта функциональность имеет нуль, чтобы сделать с Python. Это - чистая функциональность базовой оболочки. Таким образом прочитайте документы удара об автозавершении.

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

4
27.01.2020, 19:51
  • 1
    , Что означает это, может быть хорошей идеей перенести Ваш сценарий Python в сценарий Bash, позволив сценарию Bash сделать как можно больше аргумента, обрабатывающего/анализирующего. –  Kazark 11.09.2012, 21:31

Посмотрите, что это связало сообщение StackOverflow.

complete 'your_command' 'p/*/`echo list_of_your_options`/'
0
27.01.2020, 19:51

Теги

Похожие вопросы