当我使用 执行命令时ProcessBuilder
,它如何知道在哪里查找该命令?使用这个 hack/trick我已经将我的 PATH 变量(通过检查验证processBuilder.environment()
)修改为坏的(空的,工作目录等),但 ProcessBuilder 仍然可以执行排序、回显、bash 等。这是怎么做到的?!
注意:我的特定开发环境是 OSX,但此代码也将在 Red Hat Enterprise Linux 上运行。
当我使用 执行命令时ProcessBuilder
,它如何知道在哪里查找该命令?使用这个 hack/trick我已经将我的 PATH 变量(通过检查验证processBuilder.environment()
)修改为坏的(空的,工作目录等),但 ProcessBuilder 仍然可以执行排序、回显、bash 等。这是怎么做到的?!
注意:我的特定开发环境是 OSX,但此代码也将在 Red Hat Enterprise Linux 上运行。
文件说
[...] 一个命令,一个字符串列表,表示要调用的外部程序文件及其参数(如果有)。哪些字符串列表代表有效的操作系统命令取决于系统。[...]
这实质上意味着它在哪里寻找程序执行取决于您正在运行的特定系统和 JVM。
我找不到 JVM / 系统行为的完整矩阵,但据说它的行为类似于系统的流行 shell(bash
对于 *nix 和cmd
windows),即它PATH
从左到右搜索环境变量中的目录并执行它找到的第一个可执行文件。
如果您想控制查找命令,那么,请控制查找命令。不要让ProcessBuilder
搜索。使用您自己的代码找到您要运行的内容,然后将绝对路径名放入ProcessBuilder
.