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

Sam*_*s33 44 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);
Run Code Online (Sandbox Code Playgroud)

在我的.bash_profile中:

export VAR_NAME="foo"
Run Code Online (Sandbox Code Playgroud)

当我打印出值时,会打印"null" varValue.

可能是什么原因造成的?

编辑:我在这里按照最新的答案,重新启动Eclipse,它工作正常!

Som*_*ing 79

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

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

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

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

  • 实际上在启动Eclipse之前定义了环境变量,我甚至在将变量定义为不按预期工作时重新启动了我的计算机.我在OP中给出的链接中给出的答案解决了这个问题. (4认同)
  • 只是一个观察:如果您是 Windows 用户,重新启动 Eclipse 对于这种方法不起作用,您需要再次明确 **关闭** 并 **打开** IDE 以应用变量。 (2认同)