Cobra MarkPersistentFlagRequired 不适用于 Root

使用 spf13/Cobra 进行 cli 标志解析。

root 命令有一个标记为必填的字段:

rootCmd.PersistentFlags().StringVarP(&configFilePath, "config", "c","", "REQUIRED: config file")
    rootCmd.MarkPersistentFlagRequired("config")    
    rootCmd.MarkFlagRequired("config")

但是,如果它是根命令,cobra 不会引发错误。

如果我添加一个子命令并添加一个必填字段,如果命令行上未提供参数,.MarkFlagRequired 会按预期引发错误。


慕无忌1623718
浏览 101回答 1
1回答

沧海一幻觉

这对我有用。package mainimport (    "fmt"    "github.com/spf13/cobra")func main() {    var strTmp string    rootCmd := &cobra.Command{        Use: "root",        Run: func(cmd *cobra.Command, args []string) {            fmt.Println(strTmp)        },    }    subCmd := &cobra.Command{        Use: "sub",        Run: func(cmd *cobra.Command, args []string) {            fmt.Println(strTmp)        },    }    rootCmd.PersistentFlags().StringVarP((&strTmp), "test", "t", "", "test required")    rootCmd.MarkPersistentFlagRequired("test")    rootCmd.AddCommand(subCmd)    rootCmd.Execute()}输出子命令 ⇒  go run test.go sub     Error: required flag(s) "test" not setUsage:  root sub [flags]Flags:  -h, --help   help for subGlobal Flags:  -t, --test string   test required根命令⇒  go run test.go     Error: required flag(s) "test" not setUsage:  root [flags]  root [command]Available Commands:  completion  generate the autocompletion script for the specified shell  help        Help about any command  sub         Flags:  -h, --help          help for root  -t, --test string   test requiredUse "root [command] --help" for more information about a command.
打开App,查看更多内容
随时随地看视频慕课网APP