Не могу понять, как заставить работать bash-complete с аргументами, содержащими "::", потому что compgen или complete принимают каждую запись как отдельное слово, я думаю.
cmd=./my_script
_my_options()
{
local cur prev opts
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
opts="NAMESPACE::param1 NAMESPACE::param2 NAMESPACE::param3 NAMESPACE2::param1 NAMESPACE2::param2"
COMPREPLY=( $(compgen -W '$opts' -- $cur ) );
}
complete -F _my_options $cmd
Bash-Completion перестает работать здесь ..
$ ./my_script <TAB>
$ ./my_script NAMESPACE
NAMESPACE2::param1 NAMESPACE::param1 NAMESPACE::param3
NAMESPACE2::param2 NAMESPACE::param2
1. $ ./my_script NAMESPACE <TAB> or <TAB><TAB> -> no effect
2. $ ./my_script NAMESPACE: <TAB> or <TAB><TAB> -> no effect
3. $ ./my_script NAMESPACE:: <TAB> or <TAB><TAB> -> no effect
4. $ ./my_script NAMESPACE::p <TAB> or <TAB><TAB> -> no effect
COMP_WORDS
- это NAMESPACE
, ::
и param1
вместо одной строки NAMESPACE::param1
.
С кавычками работает автозаполнение, но я не хочу пропустить эти кавычки.
5. $ ./my_script "<TAB>
$ ./my_script "NAMESPACE
$ ./my_script "NAMESPACE:<TAB>
$ ./my_script "NAMESPACE::param
$ ./my_script "NAMESPACE::param1"