Есть ли способ выполнить несколько команд в exec.Command? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь выполнить набор команд в Go, используя exec.Command().Там, где я пытаюсь отсоединить одноранговый узел Gluster с помощью Docker Exec.

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 аргумента.

Ответы [ 2 ]

3 голосов
/ 02 июля 2019

Поскольку вы использовали 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)
}
1 голос
/ 02 июля 2019

Есть ли способ выполнить несколько команд в exec.Command

номер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...