Set/Get 来自 Java 的环境变量

Set/Get Environment Variable from Java

我正在 .sh 脚本中设置一个环境变量,如下所示:

export enVAr=$(/sbin/ip route|awk '/default/ { print  }')

并在 Java 中获取环境变量我 运行 脚本:

ProcessBuilder pb = new ProcessBuilder("./setEnvIP.sh");
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
{
    System.out.println(line);
}

但我得到的环境变量为空:

String setVar = System.getenv("enVAr");

如何获取环境变量?

当您使用 ProcessBuilder 执行脚本时,您会启动一个新进程并更改与该子进程关联的环境变量。因此,原始 Java 应用程序的环境保持不变。

在Java进程中环境修改生效,需要在启动JVM之前执行脚本。

在您提供的示例中,仅为子进程 (setEnvIP.sh) 及其子进程设置了环境变量。它不是未在父 java 进程中设置。

据我所知,无法在 Java 中为当前进程设置环境变量。您只能使用 ProcessBuilder.environment() 修改子进程的环境:http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html#environment()