Java的ProcessBuilder在哪里执行命令?

时间:2012-02-20 21:27:57

标签: java path command processbuilder

当我使用ProcessBuilder执行命令时,它如何知道在哪里查找该命令?使用this hack/trick我修改了我的PATH变量(通过检查processBuilder.environment()验证)是坏的(空的,工作目录等),但ProcessBuilder仍然可以执行sort,echo,bash等等。它是如何做到的?!

注意:我的特定开发环境是OSX,但此代码也可以在Red Hat Enterprise Linux上运行。

2 个答案:

答案 0 :(得分:5)

文档说

  

[...]一个命令,一个字符串列表,表示要调用的外部程序文件及其参数(如果有)。哪个字符串列表表示有效的操作系统命令取决于系统。 [...]

这实际上意味着它查找要执行的程序取决于您运行的特定系统和JVM。

我找不到完整的JVM /系统行为矩阵,但据说它的行为类似于系统的流行shell(* {1}}代表* nix而bash代表Windows,即它搜索cmd环境变量中的目录从左到右,并执行它找到的第一个可执行文件。

答案 1 :(得分:1)

如果你想控制找到命令,那么,控制好找到命令。不要让ProcessBuilder搜索。使用您自己的代码查找要运行的内容,然后将绝对路径名放入参数ProcessBuilder

相关问题