Командной Строке Bash Автодополнение Двоеточие

я успешно реализовал дополнения bash для моих пользовательских команд, когда параметры не содержали в них специальных символов, с помощью механизма compgen:

    current=${COMP_WORDS[COMP_CWORD]}
    all=$(_get_all_items)
    COMPREPLY=( $(compgen -W "$all" -- $current) )
    ...
    complete -F _prog_compl prog

Я использую тот же подход для завершения элементов, которые начинаются с символа двоеточия: :first, :second, ... Но он не показывает мне / автозаполнение их. Я попытался избежать двоеточий с обратными косыми чертами, которые тоже не работали. как мне избежать двоеточий в завершение?

элементы начинаются с двоеточия, скажем::first, :second. Если я напишу progname и начну с двоеточия, как это:

$ progname :<Tab here after colon>

Я вижу нет завершения но два двоеточия ("::") - один из них автоматически добавляется в строку I типа. Если я преобразую двоеточие в обычный символ (скажем, "b"), я получаю завершение точно так, как я хочу: bfirst, bsecond...

уместно отметить, что при нажатии вкладка помещает еще один": "рядом с моим ранее вставленным двоеточием, и он становится "::".

$ bash --version
GNU bash, version 4.1.10(2)-release (i486-slackware-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

кроме того, я провел несколько экспериментов в оболочке, которые дают:

$ compgen -W ":aaaa5 :gb2 :cd3" -- ":"
:aaaa5
:gb2
:cd3

но он странно ставит другой ": "к моему единственному": "и делает это":: "после того, как я набираю: в командной строке.

$ complete
complete -F _alp_compl alp.sh
complete -o nospace -F __dbus_send dbus-send
complete -F _myprog_compl myprog
complete -o nospace -F __gdbus gdbus
complete -o nospace -F __gsettings gsettings

1 ответов


после консультации help-bash@gnu.org я получил ответ:

двоеточие разбивает слова для системы завершения (посмотрите на описание переменной оболочки COMP_WORDBREAKS), поэтому при вводе

progname: [TAB]

система завершения получает пустое слово для завершения. Если все возможные дополнения `:' как самый длинный общий префикс, то система завершения вставит двоеточие в линия.

и мой поиск COMP_WORDBREAKS дает мне ответ от stackoverflow.

после исправления (мой отсутствующий) /etc/bash_completion файл из страница завершения debian bash, теперь мое инициированное двоеточием завершение работает по моей воле.