登录
首页 >  Golang >  Go问答

如何在表面/CLI命令中传递标志?

来源:stackoverflow

时间:2024-03-07 17:03:24 479浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《如何在表面/CLI命令中传递标志?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我正在使用 urfave/cli 在 go 中构建 cli 应用程序。

我想要的是在第一个命令之后给出的选项被视为参数而不是标志(以便我可以自己处理它们或将它们传递给其他可执行文件)。

当使用 app.action (见下文)时,这是我得到的行为,但如果我使用 cli.commands 则会收到错误。

package main

import (
    "fmt"
    "github.com/urfave/cli"
    "log"
    "os"
)

func main() {
    app := cli.newapp()

    app.commands = []cli.command{
        {
            name:    "test",
            action:  func(c *cli.context) error {
                fmt.println("test", c.args())
                return nil
            },
        },
    }

    app.action = func(c *cli.context) error {
        fmt.println(c.args())
        return nil
    }

    err := app.run(os.args)
    if err != nil {
        log.fatal(err)
    }
}

输出:go run main.go cmd -f flag

[cmd -f flag]

但是 go run main.go test cmd -f flag 退出并出现错误,我希望它输出

test [cmd -f flag]

解决方案


查看了 cli.Command 的文档后,实际上有一个非常简单的方法可以得到我想要的:将 skipflagparsing 设置为 true 会将所有标志视为普通参数。

app.Commands = []cli.Command{
    {
        Name:    "test",
        SkipFlagParsing: true
        Action:  func(c *cli.Context) error {
            fmt.Println("test", c.Args())
            return nil
        },
    },
}

今天关于《如何在表面/CLI命令中传递标志?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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