为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕森王 2022-12-26 10:37:07
我有一个 cobra CLI 用于我自己的东西。现在我想添加常用的可执行文件,例如 kubectl,calicoctl作为将使用所有参数和标志的子命令mywrapper kubectl get all --all-namespacesmywrapper kubectl create deployment nginx --image=nginx --port=80重现眼镜蛇项目mkdir mywrapper; cd mywrapper; go mod init mywrapper; cobra-cli init .并添加一个子命令,例如 kubectlcobra-cli add kubectl ./cmd/kubectl.go然后填充package cmdimport (    "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
查看完整描述

1 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

在 .之后传递你的标志--。双破折号 (--) 用于表示命令选项的结尾。在我们的例子中,需要区分传递给的标志go和没有传递的标志。双破折号后的所有内容都不会被视为go的标志。


我尝试使用 gcloud:


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)

}

然后尝试:


$ 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

添加更多标志:


$ 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


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信