【发布时间】: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