Программный доступ к завершениям bash для определенных команд

Я пытаюсь написать небольшое приложение запуска команд и хотел бы использовать вкладки bash в моей собственной системе выполнения. Я смог получить список дополнений для общих команд, используя compgen -abck .
Я пытаюсь написать небольшое приложение для запуска команд и хотел бы использовать дополнения в bash в моей собственной системе завершения. Я смог получить список завершений для общих команд ...

Я пытаюсь написать небольшое приложение запуска команд и хотел бы использовать вкладки bash в моей собственной системе выполнения. Я смог получить список дополнений для общих команд, используя compgen -abck .
Я пытаюсь написать небольшое приложение для запуска команд и хотел бы использовать дополнения в bash в моей собственной системе завершения. Я смог получить список завершений для общих команд ...

Я пытаюсь написать небольшое приложение запуска команд и хотел бы использовать вкладки bash в моей собственной системе выполнения. Я смог получить список дополнений для общих команд, используя compgen -abck .
Однако я также хотел бы получить завершение для определенных команд: например, вход git p должен отображать завершение для команд git.

Можно ли как-нибудь использовать compgen для этого? Если нет, есть ли другие способы, которыми я могу получить список завершений программно?

[EDIT: чтобы уточнить, я не пытаюсь обеспечить завершение для bash - мое приложение является средством запуска команд с графическим интерфейсом. Я просто хотел бы использовать существующие дополнения bash в своем собственном приложении.]

22
задан Tom Zych 29 November 2015 в 14:14
поделиться

2 ответа

Проверьте каталог /etc/bash_completion.d/. Здесь остаются различные сценарии завершения команд.

2
ответ дан 29 November 2019 в 05:44
поделиться

Вот простой, но работающий пример в bash:

function foo_completion()
{
    local currentWord=${COMP_WORDS[COMP_CWORD]}
    local completionList=""

    case "${COMP_CWORD}" in
        "1")
            completionList="command1 command2 command3";
            ;;
        "2")
            completionList="param1 param2 param3";
            ;;
    esac

    COMPREPLY=( $( compgen -W "${completionList}" -- ${currentWord} ) )
}

complete -F foo_completion foo

С таким кодом вы получите завершение команды N, когда наберете «foo c» + tab, а paramN будет завершено, когда вы введите "foo command1 p" + tab

Вы можете вычислить список завершения из справки по команде.

my2c

0
ответ дан 29 November 2019 в 05:44
поделиться
Другие вопросы по тегам:

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