首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能在眼镜蛇参数中插入破折号

不能在眼镜蛇参数中插入破折号
EN

Stack Overflow用户
提问于 2021-11-28 18:25:05
回答 4查看 732关注 0票数 5

我找了一些类似的问题,但除了以下几个问题,我什么也找不到:https://github.com/spf13/cobra/issues/1025

我的问题是插入一些在开头包含破折号的字符串,如下面的示例所示,

代码语言:javascript
复制
go run myapp exampleCmd set "-Dexample"

眼镜蛇似乎将输入-Dexample作为内部参数,因为返回此输出:

代码语言:javascript
复制
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()函数包含以下两行:

代码语言:javascript
复制
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
    },
}

如果存在任何解决方案,我如何接受从眼镜蛇开始时带有破折号的参数?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-11-28 19:42:47

与虚拟的所有Unix风格的命令行实用程序和标志解析库一样,Cobra将标志从带有--的参数中分离出来,之后将不再将参数解析为标志,即使这些参数以-开头。

代码语言:javascript
复制
go run myapp exampleCmd set -- "-Dexample"

这与您与其他CLI实用程序的交互方式没有什么不同。例如,rm -i设置interactive标志,而rm -- -i则删除名为-i的文件。

您肯定不希望对某些不一致的命令或子命令任意禁用标志(无论是在您自己的应用程序中还是在所有其他应用程序中),这些都是不必要的,而且违背了用户的基本期望:有时,-h会按照用户的期望执行,但由于某些命令的原因,用户无法预测,-h将被视为参数,并产生意外的行为。

Unix已经解决这个问题50多年了。让用户通过--判断参数是否是标志。

票数 5
EN

Stack Overflow用户

发布于 2021-11-28 19:28:59

使用此解决方法解决(如果是的话)

我将此元素添加到&cobra.Command{}的末尾:

代码语言:javascript
复制
DisableFlagParsing: true,

在此发现:https://github.com/spf13/cobra/issues/683

票数 -1
EN

Stack Overflow用户

发布于 2021-11-28 19:39:30

我不认为在使用dash这样的实用工具时传递以cobra符号开头的参数是不可能的。dash是一个标志指示符,如果它用引号括起来并不重要,单个dash被读取为一个简写标志,所以输入的第一个字母被解释为一个标志,无法识别,因此程序失败(并调用cmd.Help())。

您已经将set设置为命令和标志(--set -s),因此它出现在--help输出中。

我会考虑在命令参数中使用不同的字符,或者在内部以另一种方式添加它。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70146280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档