Условный завершающий пробел с программируемым завершением bash

Я создаю функцию для обеспечения программируемого завершения команды, которую я использую (с большой помощью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= ценность".

9
задан Ceri Morgan 12 April 2012 в 07:40
поделиться