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

时间:2016-06-06 09:33:32

标签: java processbuilder

为什么以下代码打印为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();            
    }
Map<String, String>envVars = processBuilder.environment();
System.out.println(envVars.keySet().contains("SOURCE"));
}

test.sh脚本的代码只是

set SOURCE=source

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

在我看来,你应该改变:

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

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