我尋找了一些類似的問題,但除此之外我什么也找不到:https : //github.com/spf13/cobra/issues/1025
我的問題是插入一些在開頭包含破折號的字串,如下例所示,
go run myapp exampleCmd set "-Dexample"
Cobra 似乎將輸入 -Dexample 作為內部引數,因為回傳此輸出:
Error: unknown shorthand flag: 'D' in -Dexample
Usage:
myapp exampleCmd set [flags]
Flags:
-h, --help help for set
Global Flags:
-s, --set string Set exampleCmd parameters. (default "default_param")
我的 init() 函式包含這兩行:
func init() {
...
exampleCmd.PersistentFlags().StringP("set", "s", defaultArgument, "Set parameters.")
exampleCmd.AddCommand(setCmd)
...
}
var exampleCmd = &cobra.Command{
Use: "set",
Short: "set parameter",
Long: `set parameter`,
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) != 1 && len(args) != 0 {
color.Red("Wrong usage, insert just a parameter")
} else if len(args) == 0 {
color.Yellow("Setting default parameter: " defaultArgument)
internal.SetParams(defaultArgument)
} else {
internal.SetParams(args[0])
}
return nil
},
}
如果存在任何解決方案,如何以眼鏡蛇開頭接受帶破折號的引數?
uj5u.com熱心網友回復:
與虛擬的所有 Unix 風格的命令列實用程式和標志決議庫一樣,Cobra 使用 a 將標志與引數分開--,此后不再有引數將被決議為標志,即使它們以 a 開頭-。
go run myapp exampleCmd set -- "-Dexample"
這與您與其他 CLI 實用程式互動的方式沒有什么不同。例如,rm -i設定interactive標志,同時rm -- -i洗掉名為-i.
你肯定不希望某些命令或子命令隨意禁止標志是不一致的(包括在您自己的應用程式,并在所有其他應用程式)的,不必要的中斷基本用戶的期望:有時,-h會做什么,用戶期望,但對于一些由于用戶無法預測的原因,命令-h將被視為引數并產生意外行為。
Unix 已經解決了這個問題 50 多年。讓用戶通過 決定引數是否是標志--。
uj5u.com熱心網友回復:
使用此解決方法解決(如果是)
我在 &cobra.Command{} 的末尾添加了這個元素:
DisableFlagParsing: true,
在這里找到:https : //github.com/spf13/cobra/issues/683
uj5u.com熱心網友回復:
我認為dash在使用像cobra. 這dash是一個標志指示符,它是否用引號括起來并不重要,singledash被讀取為速記標志,因此您輸入的第一個字母被解釋為標志并且無法識別,因此程式失敗(并呼叫cmd.Help()) .
您已設定set為命令和標志 ( --set -s),因此它會出現在您的--help輸出中。
我會考慮為您的命令引數使用不同的字符或在內部以另一種方式添加它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369728.html
