为什么以下代码打印为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
答案 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));