猿问

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

我正在尝试使用 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.Buffer

var stderr bytes.Buffer

SystemdockerCommand.Stdout = &out

SystemdockerCommand.Stderr = &stderr

err := SystemdockerCommand.Run()

if err != nil {

    fmt.Println(fmt.Sprint(err) + ": " + stderr.String())

}

fmt.Println("System Docker exec : " + out.String())

我期待的结果是“没有同行可以分离”。但退出状态为 1:“docker exec”需要至少 2 个参数。


12345678_0001
浏览 324回答 3
3回答

江户川乱折腾

由于您已经使用了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` flagcmd := 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)}

萧十郎

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

喵喔喔

有什么方法可以在 exec.Command 中执行多个命令不。
随时随地看视频慕课网APP

相关分类

Go
我要回答