我试图找出Linux上是否存在某个程序,我发现了article。我尝试从我的go程序中执行此操作并且它一直给我一个错误,说它无法找到"命令"在我的$ PATH中,这是预期的,因为它是linux中的内置命令而不是二进制文件。所以我的问题是如何在go程序中执行linux的内置命令?
exec.Command("command", "-v", "foo")
错误:exec:"命令":$ PATH中找不到可执行文件
答案 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,就像直接从命令行调用它一样。