当前位置: 首页 > 面试题库 >

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

习洲
2023-03-14
问题内容

我试图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"

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

这可能是什么原因?

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


问题答案:

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

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

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

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

聚苯乙烯

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

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

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



 类似资料:
  • 我想将有效负载架构添加到环境变量,以便我可以根据架构验证响应负载。 我的环境变量定义如下: 但是,我无法在我的邮递员测试代码中访问此环境变量。我尝试过通过以下方式访问它: 但是,这将返回null。如何访问使用postman创建的环境变量。我实现这一点的方式与http://blog.getpostman.com/2017/07/28/api-testing-tips-from-a-postman-p

  • 问题内容: 如果我在终端输入 … shell在哪里存储该环境变量? 我正在使用Ubuntu 8.10。我查看了文件〜/ .profile和/ etc / profile,找不到DISPLAY的痕迹。 问题答案: 进程的环境变量在运行时存在,并且未存储在某些文件中。它们存储在进程自己的内存中(在那里,它们会传递给子进程)。但是其中有一个虚拟文件 该文件显示了在调用进程时传递的所有环境变量(除非进程覆

  • Git 总是在一个 bash shell 中运行,并借助一些 shell 环境变量来决定它的运行方式。 有时候,知道它们是什么以及它们如何让 Git 按照你想要的方式去运行会很有用。 这里不会列出所有的 Git 环境变量,但我们会涉及最有的那部分。 全局行为 像通常的程序一样,Git 的常规行为依赖于环境变量。 GIT_EXEC_PATH 决定 Git 到哪找它的子程序 (像 git-commit

  • Puppeteer 寻找某些环境变量来帮助其操作。 如果 puppeteer 在环境中没有找到它们,这些变量的小写变体将从 npm 配置 中使用。 HTTP_PROXY, HTTPS_PROXY, NO_PROXY - 定义用于下载和运行 Chromium 的 HTTP 代理设置。 PUPPETEER_SKIP_CHROMIUM_DOWNLOAD - 请勿在安装步骤中下载绑定的 Chromium。

  • 环境变量 vue-element-admin 4.0 之后是基于 vue-cli来进行构建,所以所有的环境变量配置都是基于vue-cli来实现和控制的。 官方文档 .env # 在所有的环境中被载入 .env.[mode] # 只在指定的模式中被载入 一个环境文件只包含环境变量的“键=值”对: FOO=bar VUE_APP_SECRET=secre

  • 一些 Electron 的行为受到环境变量的控制,因为他们的初始化比命令行和应用代码更早. POSIX shells 的例子: $ export ELECTRON_ENABLE_LOGGING=true $ electron Windows 控制台: > set ELECTRON_ENABLE_LOGGING=true > electron ELECTRON_RUN_AS_NODE 类似nod