Я пытаюсь получить системный вывод из следующего кода
cmdString := "lxc exec " + containerName + " -- ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1"
ip, err := exec.Command("bash", "-c", cmdString).Output()
fmt.Println(ip)
Приведенный выше код должен получить IP-адрес из контейнера LXC.
Фактический результат go: []
Я также пробовал следующее
ip, err := exec.Command("lxc", "exec ", containerName, " --", "ip addr show eth0", "|", "grep", "'inet\b'", "| awk '{print $2}'", "| cut -d/", "-f1").Output()
fmt.Println(ip)
Я все еще получаю просто [] в качестве вывода
Правильный вывод из командной строки, как показано ниже
[root@localhost toolbox]# lxc exec simon -- ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | cut -d/ -f1
10.183.201.38
Любые идеи, что я делаю неправильно?
Я только что изменил свой код обратно на ip, err := exec.Command("lxc", "exec ", containerName, " --", "ip addr show eth0", "|", "grep", "'inet\b'", "| awk '{print $2}'", "| cut -d/", "-f1").Output() fmt.Println(ip) Результат все еще []
Это недопустимая команда. проверьте ошибку или stderr, если вы не получили ожидаемый результат
@JimB Вы имеете в виду, что код перехода неверен или команда LXC неверна? Команда LXC отлично работает в командной строке. См. пример внизу моего вопроса.
Я имею в виду, что то, что вы написали в комментарии, бессмысленно. " --" неправильно цитируется, "|" не является аргументом для lcx, это встроенная оболочка, "awk" является отдельной командой и т. д. На первый взгляд первая выглядит так, как будто она должна работать в оболочке, поэтому проверьте наличие ошибок или stderr, чтобы понять что не работает.
Прочитайте этот код, тогда вы сможете понять, как читать стандартный вывод результата.
package main
import (
"bytes"
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("/usr/bin/ls")
buf := bytes.Buffer{}
cmd.Stdout = &buf
err := cmd.Run()
fmt.Println(buf.String(), err)
}
Вы передаете всю строку в качестве одного аргумента оболочке. Передайте []string, содержащий каждый отдельный аргумент в этой строке, включая перенаправления.