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

#bash #git #command-substitution

#bash #git #команда-подстановка

Вопрос:

Я создаю новую команду, и мне нужна функция завершения, чтобы, когда я нажимаю tab пару раз, это давало мне несколько альтернатив на выбор. Список альтернатив должен представлять собой ветви, доступные в репозитории git.

Я использовал complete -W $(git branch | grep -v '^*' | xagrs) my_command , но это создает статический список один раз.bashrc «скомпилирован» и не является динамическим для каждого репозитория.

Также я нашел complete -c , но это, похоже, не работает.

Есть идеи?

Ответ №1:

complete имеет -F аргумент, который позволяет вам генерировать complete из любой функции. Внутри этой функции запустите свою команду git branch | grep -v '^*' и заполните COMPREPLY соответствующим образом. В сети доступно множество руководств по написанию функций завершения bash — изучите их и напишите свои собственные функции для своих нужд.

Примечания: -W $(...) — расширение без кавычек подвергается разделению на слова, поэтому вы эффективно работаете complete с одним аргументом завершения. Обязательно изучите, какие, как и когда использовать кавычки в оболочке.