【发布时间】:2012-07-12 12:32:42
【问题描述】:
我有一个 bash 文件(我们称之为 bash_file),其中包含许多环境变量分配(例如 TOOLS_DIR="/opt/tools")以及获取另一个文件(例如 source /opt/other_file)并从环境中构造环境变量的 bash 代码来自 other_file 的变量(例如 NEW_ENV_VAR=$FILEPATH/$FILENAME,其中 FILEPATH 和 FILENAME 在 other_file 中分配)。
我有一个 Java 应用程序,它需要这些环境变量的可见性,但是使用标准的 System.getenv() 并不能获取这些环境变量,因为 bash 文件还没有在 Java 的 shell 中获取。如果我使用Java的Runtime.exec("source bash_file"),那么环境变量只存在于Java的子shell中,即使使用了bash的export命令。
如果我在纯 bash 中,我只需执行我的 source bash_file 并可以访问在 bash_file 中分配的所有环境变量,但在 Java 中并不是那么简单。
我已经想到了几个选项,但没有一个看起来特别优雅:
-
在使用
source bash_file命令的同一进程中,将当前env添加到 .bashprofile 中,以便将来所有运行时 exec 调用都可以使用它,例如 System.getenv()。问题:我不能 100% 确定 getenv 是否会在运行时接受添加到 bashprofile 的 env var,并且将所有这些变量全局导出一点都不好.
-
再次在与
source_bash_file相同的过程中,将当前env保存到文本文件中,并使用Java 手动解析。问题:这样可以完成工作,但远不如
System.getenv()返回的地图漂亮和优雅。用 Java 编写解析器似乎也很棘手。 -
找出 Java 的 bash 环境在哪里实例化(可能在 java.System.lang 中)并修改以执行
source bash_filebefore 初始化 Java 的环境,因此变量由我的 Java 继承应用程序。问题:这似乎是我所有选项中最混乱的一个,我不知道从哪里开始寻找 Java 外壳环境的初始化。
有没有办法从 Java 中执行类似 bash 的 source 操作,或者,获取该功能的最简单实现是什么?在评估可能的行动方案时,我还表达了一些不确定性,如果有人能就这些不确定性告诉我,我将不胜感激。
谢谢!
【问题讨论】:
标签: java bash environment-variables environment