Эта команда имеет параметр -o, который принимает 2 аргумента.
Это довольно необычно.Вы уверены в этом?
Как правило, у вас есть либо параметры, которые принимают один аргумент, либо параметры, которые действуют как "флаги" и изменяют все остальные аргументы.Таким образом, вы просто проверите их наличие.
"- o" "-old-style" опции также не так распространены, как "--gnu-style" длинные опции или "-s", поэтомуЯ предлагаю двойную проверку.
complete -c команда -a "завершение без опции"
Это означает предложение "нет", "опция" и "завершение"если команда «команда».
Условие не указано, поэтому предлагаются всегда .
То, что вы хотите, - это использовать условие --condition(или "-n") опция для complete
.Это берет скрипт (как строку), который выполняется.Если он возвращает 0 (т. Е. Истина), предлагается соответствующее завершение (остаток этого complete
вызова - опция и аргументы).
Что-то вроде
# The first condition is just to see that `commandline -opc`,
# which tokenizes (-o) all tokens of the current process (-p)
# up to (but not including) the cursor (-c)
# returns just one token - which must be the command.
#
# Alternatively this condition could also be
# the inverse of the other conditions
# (offer this if nothing else would be)
complete -c command -n 'test (count (commandline -opc)) -lt 2' -a 'stuff for no argument'
# The first argument to the option we handle via "-a" to the option
complete -c command -o the-option -a 'the first argument'
# The second argument needs to be offered
# if the second-to-last token is the option.
#
# This is incomplete, because theoretically a token that
# _looks_ like the option could be offered as an argument to _another_ option.
complete -c command -n 'set -l option (commandline -opc)[-2]; test "$option" = "-o"' -a 'the second argument'