Командной Строке 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, теперь мое инициированное двоеточием завершение работает по моей воле.