#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