2 回答
TA贡献1802条经验 获得超5个赞
从手册页which
:
这需要一个或多个参数。对于它的每个参数,它将在 shell 提示符下输入该参数时将执行的可执行文件的完整路径打印到标准输出。它通过使用与 bash(1) 相同的算法在环境变量 PATH 中列出的目录中搜索可执行文件或脚本来执行此操作。
Go 的os/exec.LookPath
功能非常接近这个功能:
LookPath 在 PATH 环境变量命名的目录中搜索名为文件的可执行文件。如果文件包含斜线,则直接尝试,不查询 PATH。结果可能是绝对路径或相对于当前目录的路径。
path/filepath.Abs
如果您需要有保证的绝对路径,请使用。
TA贡献1828条经验 获得超6个赞
我不希望这是最好的答案,但这是我刚刚找到的答案。我希望有更多特定于 go 的类型,但与此同时, linux 中的类型是 bash 和 sh(alpine)中可用的默认内置类型。
type type
您可以通过运行which yields来自己测试:
type 是一个内置的 shell
中的用法go
如下所示:
b, err := exec.Command("type", "go").Output()
if err != nil {
/* 'type' is not available on the O/S */
}
goPath := strings.TrimPrefix(strings.TrimSuffix(string(b), "\n"), "go is ")
需要这些函数的原因Trim
是因为输出看起来像这样:
go 是 /usr/local/go/bin/go\n
这不是最好的方法,但它确实有效。
- 2 回答
- 0 关注
- 109 浏览
添加回答
举报