【问题标题】:Set environment variable in shell script and access in Java program在 shell 脚本中设置环境变量并在 Java 程序中访问
【发布时间】:2018-04-27 02:35:49
【问题描述】:

这个问题是Set environment variable in shell script/access in Java program 的后续问题。我试图在运行 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 读取用户详细信息,因为程序/组织不允许回显详细信息。

【问题讨论】:

    标签: java bash shell unix processbuilder


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢@cdarke,您的评论确实很有帮助。我从调用 java: 的父 bash 中导出了变量:这样导出脚本现在是父进程,而 java 是子进程。通过此更改,我在 java 代码中获得了可用的环境变量。
    猜你喜欢
    • 2012-04-25
    • 2012-04-26
    • 2011-04-26
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多