Я реализую завершение для скрипта, который имеет некоторые флаги, --flag-one
и --flag-two
--flag-two
должны появляться только в дополнениях после того, как --flag-one
было указано. И --flag-two
принимает целочисленный аргумент (который должен быть автоматически завершен). Например:
my_script --[TAB]
Если только предоставить --flag-one
в качестве кандидата на завершение.
my_script --flag-one --[TAB]
Если только предоставить --flag-two
в качестве кандидата на завершение.
my_script --flag-one --flag-two [TAB]
Должен предоставить только несколько целых чисел в качестве кандидатов на завершение.
Моя наивная идея выглядит следующим образом:
#compdef _my_script my_script
_my_script() {
local state
_arguments '--flag-one: :->flag_one'
case $state in
flag_one) _arguments '--flag-two: :->flag_two' ;;
flag_two) _alternative 'args:custom arg:(5 6 7)' ;;
esac
}
Это работает для предоставления двух флагов в правильном порядке, но табуляция после --flag-two
просто возвращается без аргументов.