登录
首页 >  Golang >  Go问答

使用网络数据使Cobra标记Bash完成

来源:stackoverflow

时间:2024-03-24 15:30:42 177浏览 收藏

使用 Cobra 库开发基于 Go 的应用程序时,可以为命令行标志启用 Bash 补全。通过使用 HTTP 调用获取有效标志值的列表,可以实现此类补全。文章介绍了实现该补全所需的步骤,包括使用 wget 或 curl 收集选项、创建数组并使用 complete 命令启用补全。通过遵循这些步骤,可以方便地为 Cobra 应用程序提供 Bash 补全,从而提高命令行体验。

问题内容

我正在开发一个基于 cobra 的 go 应用程序,我希望对命令行标志进行 bash 补全:

$ my-cool-app --some-id=

可通过进行一些 http 调用来获得 --some-id 标志的有效值列表。如何使用 cobra 实现此类 bash 补全?


解决方案


来自 This answer

我在其中创建了一个完成与 minecraft 服务器交互的函数。

.0 前言:一个函数

至于赏金

有一个很好的函数,旨在为 stackoverflow.com 创建 url:

sourl() { 
    local __so_url='https://stackoverflow.com/'
    if [ "$1" = "-v" ]; then
        printf -v "$2" '%s%s' "$__so_url" "$3"
    else
        printf '%s%s\n' "$__so_url" "$1"
    fi
}

用法:

sourl
https://stackoverflow.com/
sourl foobar
https://stackoverflow.com/foobar

或创建一个变量

sourl -v testvar baz
echo $testvar
https://stackoverflow.com/baz

.1 收集数组中的可用选项

你必须写这样的东西:

wget -o - https://somewhere.net/somepath?someoption... |
    sed -ne 's/^.*somere\(re2\).*/\1/p'

当然,您可以使用 curlnc 甚至 /dev/tcpopenssl (Login to a site (stackoverflow) by bash) 来代替 wget

但是由于您可能必须在命令行上进行多次尝试,因此请使用临时文件以避免对 web 服务器造成压力!直到您能够显示所有可用的选项。

.1b 然后创建一个数组:

sourlopts=($(sourl -v var;wget -qo - $var | sed -ne '/a href="\//{
     s/.*a href="\/\([^"\/?]*\)[?\/"].*/\1/;h;};${x;:a;
     s/\n\([^\n]\+\)\(\n\(.*\n\|\)\)\1\n/\n\1\2\n/;ta;s/^\n//;s/\n\+/ /g;p;}'))

sourlopts=($(
    sourl -v var
    wget -qo - $var |
    sed -ne '
        /a href="\//{
          s/.*a href="\/\([^"\/?]*\)[?\/"].*/\1/;
          h;
        };
        ${
          x;
         :a;
          s/\n\([^\n]\+\)\(\n\(.*\n\|\)\)\1\n/\n\1\2\n/;
          ta;
          s/^\n//;
          s/\n\+/ /g;
          p;
        }'
))

确保您的变量正确:

declare -p sourlopts
declare -a sourlopts=([0]="company" [1]="teams" [2]="questions" [3]="jobs"
     [4]="collectives" [5]="users" [6]="advertising" [7]="talent" [8]="help")

.2 启用补全

complete -w "${sourlopts[*]}" sourl

那么现在,如果你写:sourl -v testvar q,然后点击tab,控制台必须写uestion

soUrl -v testvar questions
echo $testvar
https://stackoverflow.com/questions

今天关于《使用网络数据使Cobra标记Bash完成》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>