我在.sh脚本中设置环境变量如下:
export enVAr=$(/sbin/ip route|awk '/default/ { print $3 }')
并在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);
}
但是我的env变量为null:
String setVar = System.getenv("enVAr");
如何获取env变量?
答案 0 :(得分:1)
使用ProcessBuilder
执行脚本时,将启动一个新进程并更改与该子进程关联的环境变量。因此,原始Java应用程序的环境保持不变。
您需要在启动JVM之前执行脚本,以便环境修改在Java进程中有效。
答案 1 :(得分:1)
在您提供的示例中,仅为子进程(setEnvIP.sh
)及其子进程设置环境变量。它不是在父java进程中设置的。
据我所知,没有办法在Java中为当前进程设置环境变量。您只能使用ProcessBuilder.environment()
:http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html#environment()