Подтвердить что ты не робот

Можно ли вызывать завершение bash программным путем?

То, что я хочу, - это функция, которую я могу вызывать из программы, поэтому она завершает способ, которым bash предоставил командную строку и место, где была нажата TAB.

. /etc/bash_completion
generate_completions "command arg1 arg2" 17

будет возвращать то же самое, что и

command arg1 arg2[TAB]

Я не видел никакого способа сделать это.

4b9b3361

Ответ 1

Мне действительно нужно было это сделать, чтобы выяснить, как apt-get autocomplete работает на ubuntu (построил свой собственный инструмент псевдо-репозитория:)

Это многоэтапный процесс:

Во-первых, complete -p предоставит вам список всех завершений в виде набора команд, которые вы можете запустить для репликации конфигурации. Например, скажем, вы хотите выследить автозаполнение для apt-get. Тогда:

$ complete -p | grep apt-get
complete -F _apt_get apt-get

Это говорит о том, что функция оболочки _apt_get вызывается механизмом завершения.

Вам нужно воссоздать специальные переменные, используемые функцией, а именно COMP_LINE (полная строка), COMP_WORDS (массив bash всех аргументов - в основном разделенный COMP_LINE), COMP_CWORD (индекс, должен указывать на последний значение), COMP_POINT (где внутри слова, которое вы делаете автозаполнением), и COMP_TYPE (так вы сообщаете, что хотите завершить, как если бы вы нажали вкладку).

Примечание: прочитайте man-страницу для получения дополнительной информации - вот как я понял это в первую очередь. man bash