通过ProcessBuilder运行脚本后,在java中收集环境变量

为什么以下代码打印为false? 我正在尝试test.sh脚本中的环境变量并在java中收集它。 如果可能,请建议替代方法。

public static void main(String[] args){ ProcessBuilder processBuilder = new ProcessBuilder("test.sh"); Process process; int exitCode; try { process = processBuilder.start(); exitCode = process.waitFor(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } MapenvVars = processBuilder.environment(); System.out.println(envVars.keySet().contains("SOURCE")); } 

而test.sh脚本的代码很简单

 set SOURCE=source 

ProcessBuilder.environment()方法用于在调用start()时将初始环境传递给进程。 您无法从父进程获取子进程的环境。 这不是Java限制:您甚至无法从创建子进程的Bash shell脚本(或实际上任何东西)获取子进程环境。 您需要找到另一种将信息从子进程传递回父进程的方法。

在我看来,你应该改变:

 ProcessBuilder processBuilder = new ProcessBuilder("test.sh"); 

 ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "test.sh"); processBuilder.directory(new File(the-dir-of-test.sh));