首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cobra-cli将所有参数和标志传递给可执行文件。

cobra-cli将所有参数和标志传递给可执行文件。
EN

Stack Overflow用户
提问于 2022-06-22 00:50:13
回答 1查看 1K关注 0票数 2

我有一只眼镜蛇做自己的东西。现在,我想添加常用的可执行文件,例如kubectlcalicoctl作为子命令,这些命令将消耗所有参数和标志,例如

代码语言:javascript
复制
mywrapper kubectl get all --all-namespaces
mywrapper kubectl create deployment nginx --image=nginx --port=80

复制眼镜蛇计划

代码语言:javascript
复制
mkdir mywrapper; cd mywrapper; go mod init mywrapper; cobra-cli init .

并添加一个子命令,例如kubectl

代码语言:javascript
复制
cobra-cli add kubectl 

然后将./cmd/kubectl.go填充到

代码语言:javascript
复制
package cmd

import (
    "fmt"
    "os/exec"
    "strings"

    "github.com/spf13/cobra"
)

var kubectlCmd = &cobra.Command{
    Use:   "kubectl",
    Short: "run kubectl",
    Run: func(cmd *cobra.Command, args []string) {
        out, err := exec.Command("/bin/bash", "-c", fmt.Sprintf("kubectl %v", strings.Join(args, " "))).Output()
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(string(out))
    },
}

func init() {
    rootCmd.AddCommand(kubectlCmd)
}

我现在可以运行kubectl命令,例如go run . kubectl get pods。但是当添加标志(例如go run . kubectl get pods --selector app=nginx )时,它会失败

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-22 05:16:46

--之后传递您的旗帜。双破折号(-)用于表示命令选项的结尾。在我们的例子中,需要区分传递给go的标志和不传递的标志。在双破折号之后的所有东西都不会被认为是go的标志。

我试过用gcloud:

代码语言:javascript
复制
package cmd

import (
    "fmt"
    "os/exec"

    "github.com/spf13/cobra"
)

var gcloudCmd = &cobra.Command{
    Use:   "gcloud",
    Short: "run gcloud",
    Run: func(cmd *cobra.Command, args []string) {
        out, err := exec.Command("gcloud", args...).Output()
        if err != nil {
            fmt.Println(err)
        }
        fmt.Println(string(out))
    },
}

func init() {
    rootCmd.AddCommand(gcloudCmd)
}

然后尝试:

代码语言:javascript
复制
$ go run . gcloud compute regions list -- --filter="id<1250"

NAME          CPUS  DISKS_GB  ADDRESSES  RESERVED_ADDRESSES  STATUS  TURNDOWN_DATE
asia-east1    0/24  0/4096    0/8        0/8                 UP
europe-west1  0/24  0/4096    0/8        0/8                 UP
us-central1   0/24  0/4096    0/8        0/8                 UP
us-east1      0/24  0/4096    0/8        0/8                 UP
us-west1      0/24  0/4096    0/8        0/8                 UP

添加更多标志:

代码语言:javascript
复制
$ go run . gcloud compute regions list -- --filter="id<1250" --format="table(name,id)"

NAME          ID
asia-east1    1220
europe-west1  1100
us-central1   1000
us-east1      1230
us-west1      1210
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72708535

复制
相关文章

相似问题

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