System.getenv("TEST_HOME") 返回 null

Posted

技术标签:

【中文标题】System.getenv("TEST_HOME") 返回 null【英文标题】:System.getenv("TEST_HOME") is returning null 【发布时间】:2016-07-16 14:58:11 【问题描述】:

我正在使用 ubuntu 14.0.4 机器。

我在我的.bashrc 文件中导出了一个变量 TEST_HOME 使用

export TEST_HOME=/home/dev/code/test

当我从终端尝试echo $TEST_HOME 时,它返回了/home/dev/code/test

到目前为止,一切都很好。

当我尝试使用 Java 代码时:

String value = System.getenv("TEST_HOME");

value 为空。

我错过了什么吗?

【问题讨论】:

要使该变量位于 Java 环境中,您必须从设置了该变量的 shell 启动 Java 进程。你有吗? @folkol 我没有在特定的外壳/终端中导出这个变量。我在.bashrc 中添加了它的条目 关闭并重新打开终端以刷新 .bashrc 定义的更改 这个link 可能会对你有所帮助。 @vikingsteve 我无法从 Java 代码中获取此值。我可以从终端获得它的价值。 【参考方案1】:

.bashrc 中提及变量仅适用于从 shell 启动的程序。对于系统范围的环境变量,请在 /etc/environment 中提及。

参考Ubuntu Environment variables

【讨论】:

目前我的/etc/environment 中只有路径变量。我需要在/etc/environment 中输入export TEST_HOME=/home/dev/code/test 吗? 我在/etc/environment 中添加了export TEST_HOME=/home/dev/code/test。现在echo $TEST_HOME 什么都不返回(我重新启动终端),Java 代码中的相同 null(我重新启动 eclipse)我需要为此重新启动机器吗? 这个Reload env 将有助于避免重启机器。【参考方案2】:

.bashrc 只会为 bash shell 设置环境变量。要在系统范围内设置它,请将其设置在 /etc/environment 文件中。

由于您使用的是 eclipse,并且它不在 bash shell 中运行,因此它无法获取您正在设置的变量。如果您在终端中使用 java 命令行运行程序,那么它应该会得到它。

/etc/environment 中设置变量将使其可用于eclipse。更新 /etc/environment 后,您需要重新启动计算机。

【讨论】:

以上是关于System.getenv("TEST_HOME") 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

系统变量之System.getenv()和System.getProperty()

System.getenv() 和 System.getProperty() 之间的区别 [重复]

System.getProperty System.getenv 区别 log4j取法

Java系统变量信息获取方法System.getenv()与System.getProperty()

java如何获得客户端域用户名和域用户所在的域的名称

TOMCAT_OPTS、环境变量和 System.getEnv()