我正在使用urfave/cli在 Go 中构建 CLI 应用程序。我想要的是在第一个命令之后给出的选项被视为参数而不是标志(以便我可以自己处理它们或将它们传递给其他可执行文件)。使用时app.Action(见下文),这是我得到的行为,但如果我使用,cli.Commands则会出现错误。package mainimport ( "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]
1 回答

喵喔喔
TA贡献1735条经验 获得超5个赞
查看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
},
},
}
- 1 回答
- 0 关注
- 159 浏览
添加回答
举报
0/150
提交
取消