Nginx版本命令不返回版本也不错误

时间:2019-08-30 17:33:02

标签: go command

我正在尝试使用Go检查计算机上安装了哪个版本的Nginx。

这是我的摘录:

package main

import (
    "bytes"
    "errors"
    "fmt"
    "os/exec"
)

func runCommand(command string, arg ...string) (string, error) {
    cmd := exec.Command(command, arg...)
    cmdOutput := &bytes.Buffer{}
    errOutput := &bytes.Buffer{}
    cmd.Stdout = cmdOutput
    cmd.Stderr = errOutput
    err := cmd.Run()
    if err != nil {
        return "", errors.New(string(errOutput.Bytes()))
    }
    fmt.Println("Command succeeded")
    return string(cmdOutput.Bytes()), nil
}

func getVersion(command string, arg ...string) {
    path, err := exec.LookPath(command)
    if err != nil {
        fmt.Println("No path for " + command + " found")
        return
    }
    fmt.Println("Path for " + command + " is " + path)

    result, err := runCommand(path, arg...)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(command + " version is: " + result)
}

func main() {
    getVersion("go", "version") // works
    getVersion("nginx", "-v") // does not work
    getVersion("firefox", "-v") // works
}

对于Go和Firefox,它可以正常工作,但是对于Nginx,它既不返回版本也不返回错误。似乎返回了一个空字符串...

查看权限: Firefox文件是指向root:root拥有的,权限为755的sh文件的符号链接。 Nginx文件也由root:root拥有,权限为755。

当然,运行命令nginx -v是可行的。

1 个答案:

答案 0 :(得分:2)

您期望从stdout输出。它正在打印到stderr。尝试cmd.CombinedOutput()