如何执行 shell 内置命令
How to execute a shell built-in command
我试图查明 Linux 上是否存在某个程序,我发现了这个 article。我尝试从我的 go 程序执行它,它一直给我一个错误,说它在我的 $PATH 中找不到 "command",这是可以预料的,因为它是 linux 中的内置命令,并且不是二进制文件。所以我的问题是如何从 go 程序中执行 linux 的内置命令?
exec.Command("command", "-v", "foo")
错误:执行:"command":在 $PATH
中找不到可执行文件
正如那篇文章所说,"command" 是一个 shell 内置。您可以通过 exec.LookPath
.
在本地执行此操作
如果必须,您可以使用系统 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)
}
这将打印出如下所示的唯一 ID:4cdb277e-3c25-48ef-a367-ba734ce407c1 就像直接从命令行调用它一样。
我试图查明 Linux 上是否存在某个程序,我发现了这个 article。我尝试从我的 go 程序执行它,它一直给我一个错误,说它在我的 $PATH 中找不到 "command",这是可以预料的,因为它是 linux 中的内置命令,并且不是二进制文件。所以我的问题是如何从 go 程序中执行 linux 的内置命令?
exec.Command("command", "-v", "foo")
错误:执行:"command":在 $PATH
中找不到可执行文件正如那篇文章所说,"command" 是一个 shell 内置。您可以通过 exec.LookPath
.
如果必须,您可以使用系统 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)
}
这将打印出如下所示的唯一 ID:4cdb277e-3c25-48ef-a367-ba734ce407c1 就像直接从命令行调用它一样。