首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当环境变量存在时,System.getenv()返回null

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

Stack Overflow用户
提问于 2015-04-22 04:27:36
回答 1查看 80.3K关注 0票数 61

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

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

代码语言:javascript
复制
String varValue = System.getenv("VAR_NAME");
System.out.println("Value: " + varValue);

在我的.bash_profile中:

代码语言:javascript
复制
export VAR_NAME="foo"

当我打印出varValue的值时,"null“被打印出来。

这可能是什么原因呢?

Eclipse:我按照最上面的答案here,重启了Eclipse,它起作用了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-22 06:16:55

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

环境变量仅在进程树中向下移动,并且仅当进程启动时才向下移动。Eclipse是shell的一个子进程(也是一个进程)-因此,当您启动Eclipse时,它继承了shell 上定义的所有环境变量。

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

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

附注:

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

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

  1. 定义永久环境变量还有其他方法。有关更多information.

,请查看here

票数 108
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29782467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档