对于一个项目来自动进行一些突变充分性测试,我试图从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目录( '这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上。
'envp'不变量添加到环境中,它的变量设置环境。除了您指定的变量之外,其他变量都不会在过程中使用。 **你**覆盖PATH。 –
噢,好的。因此,如果我希望它也能够在我给它的目录中执行./all.bash,那么我是否也必须将该目录添加到$ PATH中?像“PATH =/usr/bin:$ HOME/Desktop/go/src”?或者类似的东西,导致相同的错误。 – user1914745
可能最简单的就是让你的路径通过'System.getenv()。get(“PATH”)' –