【发布时间】:2012-04-19 14:14:21
【问题描述】:
我从 Java (1.6) 设置 Linux 环境时遇到一个奇怪的问题;特别是“PATH”变量。
简而言之,我有一个用于运行本机进程的管道,它使用java.lang.ProcessBuilder。用户可以选择通过名为environment 的HashMap 设置环境变量:
ProcessBuilder pb = new ProcessBuilder(args);
Map<String, String> env = pb.environment();
if (environment != null)
env.putAll(environment);
Process process = pb.start();
env 变量设置正确,如果我将它转储到控制台,PATH 变量的值正确。但是,运行该进程会导致抛出Exception:
java.io.IOException: error=2, No such file or directory
相同的进程在终端 shell 中使用相同的环境变量运行良好。为了测试这一点,我在终端中设置环境后运行了 Eclipse。在这种情况下,ProcessBuilder 进程正确运行。
那么肯定是ProcessBuilder 没有使用我为其设置的环境,而是使用当前的系统环境。
我在网上找不到任何令人满意的答案。也许这是一个特定于操作系统的问题?或者我还缺少什么?
【问题讨论】:
-
也许尝试 sysout PATH 变量并将其发布在这里,也许我们可以发现一些东西..
-
在 Windows 中要注意的另一件事是,虽然环境变量名称的大小写是 “通常不重要”(引用
System.getenvjavadoc),因此您可以互换调用System.getenv("path")或System.getenv("PATH")并得到类似的结果,对于ProcessBuilder 的环境字段则不是这样,因为Map是直接访问而不是通过特定的getter,因此大小写的任何差异都会导致错误。 .. 提示:如果您确实想要在 Windows 中获取 ProcessBuilder 的路径,请使用environment.get("Path")。 -
@PeterT 你给的提示说在windows上使用路径太棒了!!!由于 ProcessBuilder 中的这个问题,我一起度过了几个星期!多谢 !!! :) :)
-
@Destructor 很高兴为您提供帮助...我不记得它挫败了我多长时间:不是几周,但足以令人沮丧:)
标签: java environment-variables processbuilder