我正在尝试使用代码构建二进制文件并针对bin运行命令(bin是CLI) 通过代码
mytest.go
文件
cmd := exec.Command("go", "build", "-o", "./integration/testdata/fzr”,)
cmd.Dir = “./testdata"
err := cmd.Run()
现在代码运行后,我可以在bin
文件夹下看到testdata
现在,我想运行类似fzr —help
喜欢关注
cmdOut := exec.Command(“fzr”, “—help”)
cmdOut.Dir = "./testdata/"
err := cmdOut.Run()
我出错了
lookPathErr: {
Name: “fzr”,
Err: {
s: "executable file not found in $PATH",
},
}
现在,如果我将fzr容器放入go / src / bin中,则可以从终端运行fzr —help
项目结构如下
myGithubProject/
|---- integration
|---- -testdata
|---- -fzr
|---- -mytest.go
mytest
与testadata
处于同一级别,而fzr
箱处于测试数据中
可能是什么问题?
我也尝试用os.Getwd()
提供到bin的完整路径,这无济于事...
答案 0 :(得分:0)
访问外壳程序的应用程序通常不执行外壳程序初始化/配置。例如,cron显然也不要执行外壳初始化。
要使您的程序正常工作,请将绝对路径添加到可执行文件,或者从您的应用程序的启动位置开始,选择相对路径:
exec.Command(“./integration/testdata/fzr”, “—help”)
(假设显示的路径是您的实际路径)。
答案 1 :(得分:-1)
实际上,如果我们要运行二进制文件/ cmd,则必须在$PATH
var中列出它的路径,或者必须指定它的路径(绝对或相对)。在这种情况下,fzr
变量中未列出$PATH
命令的路径,因为如果这样,它将毫无问题地运行。
所以我们要么要使用相对路径
// since you set the working dir as `./testdata`
cmd := exec.Command(“./fzr”, “—help”)
cmd.Dir =“ ./integration/testdata”
或绝对路径
absolutePath, _ := os.Getwd()
cmd := exec.Command(absolutePath+“/integration/testdata/fzr”, “—help”)