通过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));
- 如何在Netbeans中将现有企业项目从Java EE5升级到Java EE 6(6.9)
- 下载哪一个:JDK还是JRE?
- Oracle Java ConcurrentHashMap的错误实现?
- 在JavaEE应用程序中使用Jackson作为JAXB-JSON处理器
- 如何使用Spring Security Java配置将HTTP请求重定向到HTTPS?
- Jersey – 在调用context.proceed()之前获取Interceptor中OutputStream的内容
- hibernate SQLquery提取变量
- Java I / O类和性能
- iText pdf在使用NOTO字体或Source Hans时不显示中文字符