如何在golang中执行linux内置命令

时间:2015-12-11 17:45:05

标签: go executable

我试图找出Linux上是否存在某个程序,我发现了article。我尝试从我的go程序中执行此操作并且它一直给我一个错误,说它无法找到"命令"在我的$ PATH中,这是预期的,因为它是linux中的内置命令而不是二进制文件。所以我的问题是如何在go程序中执行linux的内置命令?

exec.Command("command", "-v", "foo")

错误:exec:"命令":$ PATH中找不到可执行文件

2 个答案:

答案 0 :(得分:6)

就像那篇文章所说,“command”是一个内置的shell。您可以通过exec.LookPath本地执行此操作。

如果必须,您可以使用系统which二进制文件,也可以从shell中执行command

exec.Command("/bin/bash", "-c", "command -v foo")

答案 1 :(得分:1)

或者,如果它是不需要参数的内置命令,则可以执行以下操作:

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    out, err := exec.Command("uuidgen").Output()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s", out)
}

这将打印出如下所示的唯一ID:4cdb277e-3c25-48ef-a367-ba734ce407c1,就像直接从命令行调用它一样。