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

创建一个在 Go 中运行任意 shell 命令的函数

创建一个在 Go 中运行任意 shell 命令的函数

Go
拉风的咖菲猫 2021-11-29 16:59:13
我正在尝试在 go 中创建一个通用函数,该函数接受输入的 shell 命令(带参数)并执行它。请注意,shell 命令可能具有不同数量的参数。我知道exec.Command()in Go 将("ls", "-la", "/var")命令 + 参数的格式作为输入。下面截断的这段代码不起作用:func exe_cmd(commandarray []string) {var shell_command string = ""for i := 0; i < len(commandarray); i++ {                  shell_command = shell_command + " " + commandarray[i]                  }cmd := exec.Command(shell_command)fmt.Println("Command is: ", shell_command)fmt.Printf("==> Executing: %s\n", strings.Join(cmd.Args, " "))out, err := cmd.Output()fmt.Printf("OutVar: %s\n", out)fmt.Printf("ErrVar: %s\n", err)}func dummy() {dummycmd := []string{"ls", "-la", "/var"}exe_cmd(dummycmd)}在的结束for的shell_command变量将包含"ls -la /var",我有一个很难弄清楚如何形成它的方式,就是输入格式要求,即"ls", "-la", "/var"我也尝试将其设置dummycmd为变量,"ls -la /var"但我认为如果要求以上述格式将其传递给 exec.Command 则情况更糟。想法?
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您可以简单地匹配exec.Command函数的参数签名,即


(name string, arg ...string)

并使用可变参数语法将函数参数传递给 exec.Command


func execCmd(name string, args ...string) {

    cmd := exec.Command(name, args...)


    fmt.Printf("Command is: %s, %s", name, args)


    out, err := cmd.Output()


    fmt.Printf("OutVar: %s\n", out)

    fmt.Printf("ErrVar: %s\n", err)

}

但是请注意,您没有在此处调用 shell,因此依赖任何内置的 shell 都会失败。


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 187 浏览
慕课专栏
更多

添加回答

举报

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