Сохранять Bash Completion для всех команд, для которых добавлена ​​пользовательская команда - PullRequest
5 голосов
/ 21 апреля 2011

У меня есть скрипт, который позволяет выполнять процессы Bash в фоновом режиме, я назвал его «backy». Программы, которые я хочу запускать в фоновом режиме, я называю так:

backy long-running-script param1 param2

Проблема теперь в том, что я теряю завершение Bash для long-running-script, если добавляю другой скрипт.

Я хочу написать файл завершения Bash, который сохраняет не только завершение Bash для long-running-script и все его параметры, а также для любого другого сценария, который я хочу вызвать с помощью backy.

У меня есть некоторый опыт завершения Bash, но мне просто не хватает команды, которую я могу вставить в мой сценарий завершения Bash, чтобы она завершилась с завершением сценария, который должен быть вызван. Есть идеи?

Мое завершение:

have backy &&
_backy_complete()
{
  local cur prev goals

  COMPREPLY=()
  cur=${COMP_WORDS[COMP_CWORD]}

  # How to get the completion from the script that is the param for backy, 
  # in a generic way?
  COMPREPLY=( ????? )
  return 0
} &&
complete -F _backy_complete backy

РЕДАКТИРОВАТЬ - РЕШЕНИЕ:

Благодаря Лекенштейну, я заменил содержимое моего существующего скрипта завершения bash на следующую строку:

complete -F _command backy

1 Ответ

4 голосов
/ 31 августа 2011

Для таких случаев уже есть функция bash_completion:

complete -F _command backy

Используется для автозаполнения команд после sudo, fakeroot и других. Любые аргументы, передаваемые backy, игнорируются как:

backy --whatever --this --is=ignored not ignored anymore
...