Завершение создания флага Cobra bash с использованием удаленных данных
Я работаю над приложением Go на основе Cobra и хочу получить завершение bash для флагов командной строки:
$ my-cool-app --some-id=
Список допустимых значений для --some-id
флаг доступен, сделав некоторый HTTP-вызов. Как сделать такое завершение bash доступным с помощью Cobra?
2 ответа
From This answer:
Where I create a function with completion for interacting with a minecraft server.
.1 Collect available options
The list of valid values for --some-id flag is available by making some HTTP...
You have to write something like:
wget -O - https://somewhere.net/somepath?someoption... |
sed -ne 's/^.*someRE\(Re2\).*/\1/p'
Of course, instead of
wget
, you could use
curl
,
nc
or even
/dev/tcp
or
openssl
( Login to a site (stackoverflow) by bash)
You could make many tries on command line, maybe by using a temporary file in order to avoid stressing web server... Upto you're able to show all your available options.
Then create an array:
myCobraOptions=($(wget -O - https://somewhere.net/somepath?someoption |
sed -ne 's/^.*someRE\(Re2\).*/\1/p' ))
Ensure your variable is correct:
declare -p myCobraOptions
.2 enable completion
complete -W "${myCobraOptions[*]}" my-cool-app
с использованием RegisterFlagCompletionFunc
вы можете прикрепить обработчик функции для завершения значений для определенного флага.
В документе показан такой пример, как
flagName := "output"
cmd.RegisterFlagCompletionFunc(flagName, func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return []string{"yaml", "json"}, ShellCompDirectiveFilterFileExt
})
вы хотите отрегулировать cobra.ShellCompDirective
второй выходной параметр, соответствующий желаемому поведению.
ShellCompDirectiveError
укажет на ошибку.
cobra.ShellCompDirectiveNoSpace | cobra.ShellCompDirectiveNoFileComp
для некоторых строк, не связанных с завершением файловой системы.