我正在尝试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:我按照最上面的答案here,重启了Eclipse,它起作用了!
发布于 2015-04-22 06:16:55
这个问题的答案比Java语言中的System.getenv()
更通用。
环境变量仅在进程树中向下移动,并且仅当进程启动时才向下移动。Eclipse是shell的一个子进程(也是一个进程)-因此,当您启动Eclipse时,它继承了shell 上定义的所有环境变量。
您可能在启动之后在shell 上定义了环境变量。因此,Eclipse及其创建的子Java进程永远不会“知道”您的新环境变量。
由于这种行为,实际上这里的解决方案是退出Eclipse,并从您的shell重新启动它,其中的环境变量已经定义为。另一种选择是转到项目的运行配置并在那里定义环境变量。
附注:
~/.bashrc
(每次启动bash进程时都会执行该命令),可以模拟永久环境变量的行为。,请查看here
https://stackoverflow.com/questions/29782467
复制相似问题