使用codegangsta cli框架进行Bash自动完成[https://github.com/codegangsta/cli]

时间:2015-03-03 03:39:28

标签: bash autocomplete go

我是golang的新手,我正在使用代码gangsta cli框架[https://github.com/codegangsta/cli]来开发命令行应用程序。我正在尝试为命令的标志实现自动完成功能,但看起来它没有按预期工作。有没有人试图使用这个框架实现这个功能?

以下是我的代码部分:

package main

import (
    "fmt"
    "os"

    "github.com/codegangsta/cli"
)

func main() {
    app := cli.NewApp()
    app.Name = "greet"
    app.Usage = "sample command-line app by greet"
    app.Author = "abc"
    app.Email = "xyz@aaa.com"
    app.EnableBashCompletion = true
    app.Commands = []cli.Command{
        {
            Name:      "read",
            ShortName: "r",
            Usage:     "read something",
            Subcommands: []cli.Command{
                {
                    Name:   "articles",
                    Usage:  "read articles",
                    Action: readArticles,
                },

                {
                    Name:  "tweets",
                    Usage: "read Tweets",
                    Flags: []cli.Flag{
                        cli.StringFlag{

                            Name:  "account",
                            Value: "SomeThing",
                            Usage: "name of Twitter account",
                        },
                    },
                    Action: readTwitter,
                },
            },
        },
    }
    app.Run(os.Args)
}

func readArticles(ctx *cli.Context) {
    fmt.Println("Go to http://www.google.com to read articles!")
}

func readTwitter(ctx *cli.Context) {
    fmt.Printf("Go to https://twitter.com/%s to read tweets!", ctx.String("account"))
}

这是预期的输出:

./ greet read tweets --a [TAB] [TAB]不起作用。

2 个答案:

答案 0 :(得分:0)

在Go代码中启用bash补全只是其中的两个步骤。

您还需要下载并获取this脚本。下载后,只需运行:

source bash_autocomplete

要使其永久存在,请将上述命令及其完整路径添加到您的〜/ .bashrc或〜/ .bash_profile文件中。

答案 1 :(得分:-1)

我会读一下cli repo的自述文件的这一部分。