System.getenv仍然在MacOS Mojave - Java上获取已删除的env变量值

问题描述 投票:1回答:1

我在我的bash_profile和我的配置文件中添加了一些可导出的环境变量,格式如下,导出“X = y”。这应该工作,现在我想永久删除它们。我尝试了以下方法:

  1. 从bash_profile和配置文件中删除导出的变量,并保存文件,并调用source~ / .bash_profile和source~ / .profile。
  2. 在终端窗口中称为“未设置X”。在我可以调用显示y的“echo $ X”之前,现在它什么也没显示。
  3. 重新启动Mac计算机。

但是,每当我调用Java的System.getenv(X)时,仍会返回env变量X的值(y)。还有什么办法可以在MacOS Mojave中完全消除我的系统中的env变量?

java environment-variables system macos-mojave
1个回答
1
投票

看来你认为环境变量是全球性的。也就是说,修改一个程序(例如正在运行的终端)中的值将影响不同程序中的值。这不是env vars在像OS这样的UNIX中的工作方式。每个进程都提供了父进程提供的env变量的副本。也就是说,它们是从父进程继承的。

事实上你必须在终端中使用unset X来删除它意味着要么是shell从终端进程继承它,要么你的shell正在设置它。在后一种情况下,shell启动时读取的特定文件取决于shell。但是大多数交互式shell都会读取/ etc / profile,因此您可能希望在那里查看。

您说您的Java应用程序是由Tomcat运行的,但未提及Tomcat是如何启动的。这对我上面提到的原因很重要。

请注意,macOS使用名为launchd的守护程序来管理运行大多数服务。这些服务是通过“plist”文件配置的。见man launchd.plist。那些launchd配置文件支持定义自定义env变量。这有点不寻常但值得一看。查看〜/ Library / LaunchAgents,/ Library / LaunchAgents或/ Library / LaunchDaemons中的任何文件是否提及env var。

© www.soinside.com 2019 - 2024. All rights reserved.