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

Collect environment variable in java after running script through 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

在我看来,你应该改变:

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

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

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