对于一个自动化一些突变充分性测试的项目,我正在尝试从 Java 程序内部的源代码制作 GoLang。我已经能够从终端中的源代码中创建它,并尝试在 Java 中使用该命令Runtime.getRuntime().exec()
命令:
String[] envp = new String[3];
envp[0] = "CC=/usr/bin/clang";
envp[1] = "GOROOT_BOOTSTRAP=/usr/local/go";
envp[2] = "CGO_ENABLED=0";
Runtime.getRuntime().exec("./all.bash", envp, "$HOME/Desktop/go/src");
与此等效的命令在终端中运行良好。在 java 中运行此代码(并打印输出)将得到以下结果:
./all.bash
##### Building Go bootstrap tool.
cmd/dist
go tool dist: FAILED: uname -r: exec: "uname": executable file not found in $PATH
所以奇怪的是找不到uname
。再说一遍,如果我输入'uname'
在终端上,它工作正常。于是我找到了目录uname
('which uname'给出'/usr/bin/uname'
)并设置$PATH
对于这个命令:
String[] envp = new String[4];
envp[0] = "CC=/usr/bin/clang";
envp[1] = "GOROOT_BOOTSTRAP=/usr/local/go";
envp[2] = "CGO_ENABLED=0";
envp[3] = "PATH=/usr/bin";
Runtime.getRuntime().exec("./all.bash", envp, "$HOME/Desktop/go/src");
而是得到输出:
./all.bash
env: bash: No such file or directory
所以当我设置路径时,它在目录中找不到该程序。这向我表明,当Runtime.getRuntime().exec()
被调用,它会覆盖$PATH
成为我传递给它的目录,然后覆盖我给它的环境变量。但为了./all.bash
为了工作,我需要两条路径都在$PATH
多变的。我怎样才能做到这一点?
在 Mac OS X 10.11.6 上。