use*_*307 2 java unix bash shell processbuilder
这个问题是Setenvironmentvariablesinshellscript/accessinJavaprogram的后续问题。我试图在运行 shell 脚本后获取 Java 中的环境变量,但无法执行此操作
Shell 脚本:getDetails.sh:
#!/bin/bash
# File: getDetails.sh
export userDetails="USER123"
# echo "User Details for App :$userDetails"
Run Code Online (Sandbox Code Playgroud)
Java方法:
String details = new String("source " + "getDetails.sh");
ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash", "-c", details);
Process getPwdProc = processBuilder.start();
System.out.println("Details - " + processBuilder.environment().get("userDetails"));
Run Code Online (Sandbox Code Playgroud)
java 方法为环境变量 userDetails 返回/打印 null。
PS - 请注意,此处不可能使用 InputStream/BufferedReader 读取用户详细信息,因为程序/组织不允许回显详细信息。
从进程导出环境变量bash不会使其成为“全局”变量,这意味着它会继承(复制)到子进程。也就是说,进程由bash导出它的进程运行。
这里 Java 是父进程,没有(合法)方法将变量从子进程注入到父进程中。必须在 Java 运行之前设置并导出该变量。
我建议使用“包装器”bash 脚本,该脚本首先导出变量,然后运行 Java 应用程序。
| 归档时间: |
|
| 查看次数: |
2612 次 |
| 最近记录: |