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()
我正在 .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()