我正在尝试查找Linux上是否存在某个程序,并找到了这篇文章。我尝试从我的Go程序中执行此操作,但它一直给出错误,说无法在$PATH中找到“command”,这是可以预料的,因为它是Linux内置命令而不是二进制文件。那么我的问题是如何从Go程序内部执行Linux的内置命令?
exec.Command("command", "-v", "foo")
错误:exec:“command”:在$PATH中找不到可执行文件
我正在尝试查找Linux上是否存在某个程序,并找到了这篇文章。我尝试从我的Go程序中执行此操作,但它一直给出错误,说无法在$PATH中找到“command”,这是可以预料的,因为它是Linux内置命令而不是二进制文件。那么我的问题是如何从Go程序内部执行Linux的内置命令?
exec.Command("command", "-v", "foo")
错误:exec:“command”:在$PATH中找不到可执行文件
就像那篇文章所说的一样,“command”是一个shell内置命令。你可以通过exec.LookPath
在go中原生实现这个功能。
如果必须这样做,你可以使用系统的which
二进制文件,或者在shell中执行command
。
exec.Command("/bin/bash", "-c", "command -v foo")
另外,如果它是一个不需要参数的内置命令,您可以执行以下操作:
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)
}
type
比which
更可取(后者是一个脚本)。 - Rick-777