在shell脚本中设置环境变量并在Java程序中访问

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 读取用户详细信息,因为程序/组织不允许回显详细信息。

cda*_*rke 5

从进程导出环境变量bash不会使其成为“全局”变量,这意味着它会继承(复制)到子进程。也就是说,进程由bash导出它的进程运行。

这里 Java 是父进程,没有(合法)方法将变量从子进程注入到父进程中。必须在 Java 运行之前设置并导出该变量。

我建议使用“包装器”bash 脚本,该脚本首先导出变量,然后运行 ​​Java 应用程序。