Я создаю функцию для обеспечения программируемого завершения команды, которую я использую (с большой помощьюhttp://www.debian-administration.org/articles/317). Использование сценария оболочки выглядит следующим образом :
script.sh command [command options]
, где команда может быть либо «foo», либо «bar», а параметры команды для «foo» — «a _foo=value» и «b _foo=value» и Опции команды для 'bar': 'a _bar=value' и 'b _bar=value'.
Вот конфигурация, которую я использую:
_script() {
local cur command all_commands
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
command="${COMP_WORDS[1]}"
all_commands="foo bar"
case "${command}" in
foo)
COMPREPLY=( $(compgen -W "--a_foo --b_foo" -- ${cur}) ); return 0;;
bar)
COMPREPLY=( $(compgen -W "--a_bar --b_bar" -- ${cur}) ); return 0;;
*) ;;
esac
COMPREPLY=( $(compgen -W "${all_commands}" -- ${cur}) )
return 0
}
complete -F _script script.sh
Это в основном работает так, как я хотел бы:
% script.sh f[TAB]
завершается до:
% script.sh foo
(с пробелом в конце по желанию)
Однако это:
% script.sh foo a[TAB]
также завершается до:
% script.sh foo a_foo
(с пробелом в конце)
Я бы хотел заменить пробел в конце на '='. В качестве альтернативы я хотел бы изменить значения, передаваемые в compgen, на «--a _foo= --b _foo=", и в этом случае я мог бы просто удалить завершающий пробел.
К сожалению, эта команда не находится под моим контролем, поэтому я не могу изменить параметры командной строки в формате "--a _foo value" вместо "--a _foo= ценность".