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

在shell脚本中设置环境变量并在Java程序中访问,java,bash,shell,unix,processbuilder,Java,Bash,Shell,Unix,Processbuilder,这个问题是后续问题。在运行shell脚本后,我试图用Java获取环境变量,但无法这样做 Shell脚本:getDetails.sh: #!/bin/bash # File: getDetails.sh export userDetails="USER123" # echo "User Details for App :$userDetails" Java方法: String details = new String("source " + "getDetails.sh"); ProcessBu

这个问题是后续问题。在运行shell脚本后,我试图用Java获取环境变量,但无法这样做

Shell脚本:getDetails.sh:

#!/bin/bash
# File: getDetails.sh
export userDetails="USER123"
# echo "User Details for App :$userDetails"
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"));
java方法返回/打印环境变量-userDetails的null


注意-请注意,此处不可能使用InputStream/BufferedReader读取用户详细信息,因为程序/组织不允许回显详细信息。

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

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


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

谢谢@cdarke,您的评论确实很有帮助。我从调用java的父bash导出变量:这样导出脚本现在是父进程,java是子进程。通过此更改,我可以在java代码中使用环境变量。