当环境变量存在时,System.getenv()返回null

时间:2015-04-21 20:27:36

标签: java bash environment-variables

我正在尝试System.getenv()获取我通过终端(Mac)设置的环境变量的值,我还在.bash_profile文件中设置变量并重新加载。在这样做之后,我回显了值并且正确的值被打印到终端。尝试检索变量的值时(我确保在我的.bash_profile文件和使用System.getenv()时使用了正确的名称。

在下面的代码中,我已使用 VAR_NAME 替换了变量的名称:

String varValue = System.getenv("VAR_NAME");
System.out.println("Value: " + varValue);

在我的.bash_profile中:

export VAR_NAME="foo"

"空"打印出varValue的值时打印。

这可能是什么原因?

编辑:我按照最高回答here,重新启动了Eclipse并且运行正常!

1 个答案:

答案 0 :(得分:64)

这个问题的答案比Java中的System.getenv()更为通用。

环境变量仅在进程树中进行,并且仅在启动进程时进行。 Eclipse是shell的子进程 - 因此,它继承了在启动Eclipse 时在shell 上定义的所有环境变量。

您可能在启动Eclipse之后在shell 上定义了环境变量。因此,Eclipse和它创建的子Java进程,永远不会“知道”你的新环境变量。

由于这种行为,实际上这里的解决方案是退出Eclipse并再次从shell启动它,其中已经定义了环境变量 。另一种选择是转到项目的运行配置并在那里定义环境变量。