如何使用exec在Java中设置环境变量?

Jim*_*mmy 8 java environment-variables runtime.exec java-6

可能重复:
如何从Java设置环境变量?

我正在尝试设置一个环境变量,并将其读回以验证它是否已实际设置.

我有以下内容:

import java.io.IOException;

public class EnvironmentVariable
{
    public static void main(String[] args) throws IOException
    {
        Runtime.getRuntime().exec("cmd.exe set FOO=false");

        String s = System.getenv("FOO");
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,它似乎FOO始终为null,这意味着它可能未正确设置.

我的exec命令是否正确?javadocs声明它可以将一个字符串参数作为命令.

有任何想法吗?

sud*_*ode 17

有重载的exec方法,您可以在其中包含一组环境变量.例如exec(String command,String [] envp).

这是一个在exec的子进程中设置env变量的示例(有证据):

public static void main(String[] args) throws IOException {

    String[] command = { "cmd", "/C", "echo FOO: %FOO%" };
    String[] envp = { "FOO=false" };

    Process p = Runtime.getRuntime().exec(command, envp);
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String s = reader.readLine();
    System.err.println(s);
}
Run Code Online (Sandbox Code Playgroud)

但是,这会将变量设置为已创建进程的env,而不是当前(Java)进程的env.

类似地,如果您使用exec任务从Ant创建进程(正如您在注释中提到的那样),那么您可以使用嵌套env元素将环境变量传递给子进程,例如

<exec executable="whatever">
   <env key="FOO" value="false"/>
</exec>
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 2

这行不通。当您启动一个新进程时,该进程会收到环境的副本。然后它对环境变量所做的任何更改都在该副本中进行,并且在任何时候都不会对调用者可见。

你到底想达到什么目的?