Завершение создания флага 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 для некоторых строк, не связанных с завершением файловой системы.

Другие вопросы по тегам