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

有什么方法可以在 exec.Command 中执行多个命令吗?

有什么方法可以在 exec.Command 中执行多个命令吗?

Go
12345678_0001 2023-06-26 18:00:07
我正在尝试使用 Go 执行一组命令exec.Command()。我尝试使用 Docker Exec 分离 Gluster 对等点。fmt.Println("About to execute gluster peer detach")SystemdockerCommand := exec.Command("sh", "-c", "docker exec ", "9aa1124", " gluster peer detach ", "192.168.1.1", " force")var out bytes.Buffervar stderr bytes.BufferSystemdockerCommand.Stdout = &outSystemdockerCommand.Stderr = &stderrerr := SystemdockerCommand.Run()if err != nil {    fmt.Println(fmt.Sprint(err) + ": " + stderr.String())}fmt.Println("System Docker exec : " + out.String())我期待的结果是“没有同行可以分离”。但退出状态为 1:“docker exec”需要至少 2 个参数。
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

由于您已经使用了sh -c,因此下一个参数应该是完整的命令或命令:


SystemdockerCommand := exec.Command("sh", "-c", "docker exec 9aa1124 gluster peer detach 192.168.1.1 force")

更一般地说,如下所示:


cmd := exec.Command("/bin/sh", "-c", "command1 param1; command2 param2; command3; ...")

err := cmd.Run()       

看这个例子:


sh := os.Getenv("SHELL") //fetch default shell

//execute the needed command with `-c` flag

cmd := exec.Command(sh, "-c ", `docker exec 9aa1124 ...`)

或者这个,首先将命令放入字符串中:


cmd := "cat /proc/cpuinfo | egrep '^model name' | uniq | awk '{print substr($0, index($0,$4))}'"

out, err := exec.Command("bash","-c",cmd).Output()

if err != nil {

    return fmt.Sprintf("Failed to execute command: %s", cmd)

}


查看完整回答
反对 回复 2023-06-26
?
萧十郎

TA贡献1815条经验 获得超12个赞

多通道执行 kube-node-one -- bash -c "ls && ls -a"



查看完整回答
反对 回复 2023-06-26
?
喵喔喔

TA贡献1735条经验 获得超5个赞

有什么方法可以在 exec.Command 中执行多个命令

不。


查看完整回答
反对 回复 2023-06-26
  • 3 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

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