【问题标题】:Setting Environment Variables in Unix Script from Java using ProcessBuilder使用 ProcessBuilder 从 Java 设置 Unix 脚本中的环境变量
【发布时间】:2018-07-23 05:52:44
【问题描述】:

我在 Unix(具体来说是 AIX)上运行 Java 程序,需要调用外部 shell 脚本。此外,我需要设置一些可用于 shell 脚本的环境变量(从技术上讲,它们需要可用于 shell 脚本调用的 Ant 程序)。我知道这个设置听起来很奇怪,但我的 Java 程序是一个安装程序,它包装了一个预先存在的 Ant 脚本。我想用它来提示输入一些密码作为加密值作为环境变量输入 Ant 脚本。

我的问题是我添加的环境变量对 shell 脚本以及我的 Ant 脚本不可见。我正在使用 ProcessBuilder.enviroment() 映射将其设置如下:

ProcessBuilder pb = new ProcessBuilder("build.sh", "install");

pb.directory("app_root/install"));

//if we have encrypted passwords, set them as environment variables on the child process
if (this.encryptedPasswords.size() > 0)
{
    for (Entry<String,String> entry : this.encryptedPasswords.entrySet())
    {
        String userName = entry.getKey();
        String encryptedPassword = entry.getValue();

        if (this.debug == true)
            System.out.println("Adding environment variable [" + userName + "] with value [" + encryptedPassword + "]");

        pb.environment().put(userName, encryptedPassword);
    }
}

我的 shell 脚本(我不能轻易更改)基本上是这样的:

#!/bin/sh

. ./build.env.sh

ant -buildfile build_impl.xml $*

build.env.sh 脚本设置和导出一些静态的环境变量,如 WEBLOGIC_HOME 等,也被 Ant 脚本使用。

同样的概念也适用于 Windows。我确信这是我不熟悉的 Unix/AIX 的东西。例如,我需要导出这些新的环境变量吗?如果是这样,如何从 Java 中的 ProcessBuilder 完成?

提前致谢。

【问题讨论】:

  • stackoverflow.com/questions/318239/… 这可能会有所帮助
  • 谢谢-我看过那篇文章,其中引用了一些技巧来更改您自己的进程的环境变量。但是,我不需要这样做。我只需要将新的环境变量传递给我从 Java 派生的进程。它只是在 AIX 上不适合我。

标签: java shell ant aix processbuilder


【解决方案1】:

如果进程每次都要求输入密码并被 JVM 使用,您可以使用 System.setProperty(..) 从 java 添加。这与为 jvm 参数提供 -D 选项基本相同。

代替

pb.environment().put(userName, encryptedPassword);

会写

    System.setProperty("userName",userName);
    System.setProperty("encryptedPassword", encryptedPassword);

【讨论】:

  • 谢谢。不幸的是,我没有直接调用 JVM(甚至 Ant),并且必须通过这个 shell 脚本,我不能轻易更改它。因此,我的计划是使用环境变量并将它们传播到子进程。
  • 你是在添加宿主机环境变量吗?
  • 不确定这是什么意思,但如果您的意思是新环境变量名称与现有环境变量冲突,答案是否定的。
  • 您可以执行类似的操作 - ProcessBuilder pb = new ProcessBuilder("build.sh", "-c", "echo $username"); Map env = pb.environment(); env.put("用户名", 值);
猜你喜欢
  • 2011-11-13
  • 2023-03-03
  • 1970-01-01
  • 2015-08-14
  • 2020-04-05
  • 2015-01-15
  • 2014-01-29
  • 2012-01-19
相关资源
最近更新 更多