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

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

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

String varValue = System.getenv("VAR_NAME");

System.out.println("Value: " + varValue);

在我的.bash_profile中:

export VAR_NAME="foo"

当我打印出的值时,将打印“ null” varValue

这可能是什么原因?

我按照这里的最高答案,重新启动Eclipse,它起作用了!

回答:

这个问题的答案不仅限于System.getenv()Java。

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

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

由于这种行为,实际上,这里的解决方案是退出Eclipse,然后从

了环境变量的Shell中再次启动它。另一种选择是转到项目的运行配置并在其中定义环境变量。

聚苯乙烯

  1. 显然,如果重新启动计算机,则仅在您定义了变量的shell进程消失后,将不会保存在shell上定义的环境变量。

  2. 如果使用 ,则通过将环境变量设置命令添加到文件~/.bashrc中(每次启动bash进程都会执行该命令),可以模拟永久环境变量的行为。

  3. 还有其他方法可以定义永久性环境变量。您可以在这里查看更多信息。

以上是 当环境变量存在时,System.getenv()返回null 的全部内容, 来源链接: utcz.com/qa/406274.html

回到顶部