当环境变量存在时,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中再次启动它。另一种选择是转到项目的运行配置并在其中定义环境变量。
聚苯乙烯
显然,如果重新启动计算机,则仅在您定义了变量的shell进程消失后,将不会保存在shell上定义的环境变量。
如果使用 ,则通过将环境变量设置命令添加到文件
~/.bashrc
中(每次启动bash进程都会执行该命令),可以模拟永久环境变量的行为。还有其他方法可以定义永久性环境变量。您可以在这里查看更多信息。
以上是 当环境变量存在时,System.getenv()返回null 的全部内容, 来源链接: utcz.com/qa/406274.html