Сохранить завершение Bash для всех команд, которым предшествует пользовательская команда

#bash #bash-completion

#bash #bash-завершение

Вопрос:

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

 backy long-running-script param1 param2
  

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

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

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

Мое завершение на данный момент:

 have backy amp;amp;
_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
} amp;amp;
complete -F _backy_complete backy
  

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

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

 complete -F _command backy
  

Комментарии:

1. Вам не нужно добавлять решение к вашему вопросу, поскольку оно отображается прямо в ответе под вопросом.

Ответ №1:

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

 complete -F _command backy
  

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

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