我正在使用urfave/cli在 Go 中構(gòu)建 CLI 應(yīng)用程序。我想要的是在第一個命令之后給出的選項被視為參數(shù)而不是標志(以便我可以自己處理它們或?qū)⑺鼈儌鬟f給其他可執(zhí)行文件)。使用時app.Action(見下文),這是我得到的行為,但如果我使用,cli.Commands則會出現(xiàn)錯誤。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退出時出現(xiàn)錯誤,我希望它輸出test [cmd -f flag]
1 回答

喵喔喔
TA貢獻1735條經(jīng)驗 獲得超5個贊
查看cli.Command的文檔后,實際上有一種非常簡單的方法可以實現(xiàn)我想要的:設(shè)置SkipFlagParsing
為 true 會將所有標志視為普通參數(shù)。
app.Commands = []cli.Command{
? ? {
? ? ? ? Name:? ? "test",
? ? ? ? SkipFlagParsing: true
? ? ? ? Action:? func(c *cli.Context) error {
? ? ? ? ? ? fmt.Println("test", c.Args())
? ? ? ? ? ? return nil
? ? ? ? },
? ? },
}
- 1 回答
- 0 關(guān)注
- 121 瀏覽
添加回答
舉報
0/150
提交
取消