Ответ 1
Изменение $COMP_WORDBREAKS
в вашем завершении script не рекомендуется (поскольку это глобальная переменная, и это может повлиять на поведение других скриптов завершения - например, ssh).
Однако завершение bash предлагает некоторые вспомогательные методы, которые вы можете использовать для достижения своей цели.
Рекомендуемый способ обработки символов, не говорящих по слову, в словах завершения состоит в использовании двух вспомогательных методов:
-
_get_comp_words_by_ref
с опцией-n EXCLUDE
- получает слово до конца, не рассматривая символы в EXCLUDE как разрывы слов
-
__ltrim_colon_completions
- удаляет двоеточие, содержащее префикс, из элементов COMPREPLY
(обходной путь для http://tiswww.case.edu/php/chet/bash/FAQ - E13)
- удаляет двоеточие, содержащее префикс, из элементов COMPREPLY
Итак, вот основной пример того, как обрабатывать двоеточие (:) в словах завершения:
_mytool()
{
local cur
_get_comp_words_by_ref -n : cur
# my implementation here
COMPREPLY=( $(compgen ..........my_implement......... -- $cur) )
__ltrim_colon_completions "$cur"
}
complete -F _mytool mytool
В качестве окончательного совета вспомогательные методы расположены в /etc/bash_completion
. Взгляните внутрь, чтобы прочитать подробное описание каждого метода и найти дополнительные вспомогательные методы.