У меня есть сценарий, который требует в качестве аргумента имени команды и аргументов этой команды.Выполнение Bash из другого завершения
Итак, я хочу написать функцию завершения, которая завершит имя команды и завершит аргументы для этой команды.
Так что я могу завершить имя команды, как этот
if [[ "$COMP_CWORD" == 1 ]]; then
COMPREPLY=($(compgen -c ${COMP_WORDS[COMP_CWORD]}))
else
#Don't know what to write here
fi
Так что это завершит первый аргумент списка команд оболочки, которые доступны для запуска. И по второму и другим аргументам мне нужно выполнить команду ${COMP_WORDS[COMP_CWORD]}
.
Я думал об удалении первого элемента из COMP_WORDS
, уменьшаясь COMP_CWORD
по одному и вызвать функцию _${COMP_WORDS[0]}
с именем, что префиксы «_» в команду, потому что во многих примерах функции, которая завершает команду имеет такое название, но когда Я выполнил complete -p
в bash. Я обнаружил, что многие команды завершены функциями, имеющими разные имена. И что касается меня, такое решение выглядит очень плохо.
Я не гуру сценариев, так что я просто не знаю, с чего начать поиск решения.
Проверить завершение, как команда для 'sudo' works ... sudo принимает команду & arguments для этой команды в качестве параметров завершения ... То же, что и ваш скрипт. – anishsane
Посмотрите, будет ли' complete -F _ команда name-of-your-script' works .. – anishsane
@anishsane Спасибо. =) Я забыл, что завершение sudos делает то же самое поведение, в котором я нуждаюсь. Я смотрю на скрипт завершения и обнаружил, что «_command_offset 1» делает именно то, что мне нужно в другой части. Я проверю это на пару дней, если есть какое-то неожиданное поведение и опубликуйте решение здесь, если все будет в порядке. – JustAnotherCurious