当环境变量存在时,System.getenv()返回null
我正在尝试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
的值时,会打印“null”。
可能是什么原因造成的?
编辑:我在这里按照最新的答案,重新启动Eclipse,它工作正常!
这个问题的答案比Java中的System.getenv()
更通用。
环境变量仅在进程树下进行,并且仅在启动进程时才进行。 Eclipse是shell的子进程 – 因此,它inheritance了在启动Eclipse时在shell上定义的所有环境变量。
您可能在启动Eclipse 后在shell上定义了环境变量。 因此,Eclipse和它创建的子Java流程永远不会“知道”您的新环境变量。
由于这种行为,实际上这里的解决方案是退出Eclipse并再次从shell启动它,其中已经定义了环境变量。 另一种选择是转到项目的运行配置并在那里定义环境变量。