System.getenv仍然在MacOS Mojave-Java上拾取已删除的env变量值
我在我的bash_概要文件和我的概要文件中添加了一些可导出的环境变量,格式为export“X=y”。这是它应该工作,现在我想永久删除它们。我尝试了以下方法:System.getenv仍然在MacOS Mojave-Java上拾取已删除的env变量值,java,environment-variables,system,macos-mojave,Java,Environment Variables,System,Macos Mojave,我在我的bash_概要文件和我的概要文件中添加了一些可导出的环境变量,格式为export“X=y”。这是它应该工作,现在我想永久删除它们。我尝试了以下方法: 从bash_概要文件和概要文件中删除导出的变量,保存这些文件,并调用source~/.bash_概要文件和source~/.profile 在终端窗口中称为“取消设置X”。在我调用“echo$X”之前,它会显示y,现在它什么也不显示 重新启动Mac电脑 然而,每当我调用Java的System.getenv(X)时,仍然会返回env变量X的值
然而,每当我调用Java的System.getenv(X)时,仍然会返回env变量X的值(y)。我还需要做什么才能从MacOS Mojave中的系统中完全消除一个env变量 您似乎认为环境变量是全局的。也就是说,修改一个程序(如正在运行的终端)中的值将影响另一个程序中的值。这不是env-vars在类UNIX操作系统中的工作方式。每个进程都提供了父进程提供的环境变量的副本。也就是说,它们是从父进程继承的 您必须在终端中
取消设置X
才能删除它,这意味着shell正在从终端进程继承它,或者您的shell正在设置它。在后一种情况下,shell启动时读取的特定文件取决于shell。但是/etc/profile被大多数交互式shell读取,所以您可能想看看那里
你说你的Java应用程序是由Tomcat运行的,但没有提到Tomcat是如何启动的。出于我上面提到的原因,这一点很重要
请注意,macOS使用名为
launchd
的守护进程来管理运行的大多数服务。这些服务是通过“plist”文件配置的。请参见人工发射.plist
。这些启动配置文件支持定义自定义环境变量。这有点不寻常,但值得一看。查看~/Library/LaunchAgents、/Library/LaunchAgents或/Library/LaunchDaemons中的任何文件是否提到环境变量。在我的Windows框中,更新的环境列表通常需要重新启动电脑(无论是添加还是删除)被读取。忘记添加了,我重新启动了我的mac,仍然得到了相同的结果。你检查过像~/.bashrc
这样的其他文件吗?我检查过~/.bashrc,还有其他文件需要注意吗?谢谢Ivan。您需要解释一下如何启动java程序。另外,现在您已经从个人bash配置文件中删除了var,如果在新的终端实例中echo$X
会发生什么?我在LaunchAgent或守护进程中没有看到任何内容,但是我确实使用catalina.sh文件通过终端启动tomcat。catalina.sh
的第一行是什么?如果是类似于#/bin/bash
则它不会读取任何点文件,除非设置了env varbash_env
。运行该脚本时,您是否首先验证未设置X
(或其名称)?