System.getenv по-прежнему получает значение удаленной переменной env в MacOS Mojave - Java - PullRequest
0 голосов
/ 01 марта 2019

Я добавил некоторые экспортируемые переменные окружения в мой bash_profile и файлы моего профиля в следующем формате экспорта "X = y".Это сработало как надо, теперь я хочу удалить их навсегда.Я пробовал следующие методы:

  1. Удаление экспортированных переменных из bash_profile и файлов профиля, сохранение файлов и вызовы source ~ / .bash_profile и source ~ / .profile.
  2. Вызывается «unset X» в окне терминала.Прежде, чем я мог вызвать «echo $ X», который отображал бы y, теперь он ничего не отображает.
  3. Перезагрузка компьютера Mac.

Тем не менее, всякий раз, когда я вызываю Java System.getenv (X), значение переменной (en) переменной env по-прежнему возвращается.Что еще мне нужно сделать, чтобы полностью исключить переменную env из моей системы в MacOS Mojave?

1 Ответ

0 голосов
/ 01 марта 2019

Похоже, вы верите, что переменные окружения являются глобальными.То есть изменение значения в одной программе, такой как работающий терминал, повлияет на значение в другой программе.Это не то, как env vars работает в UNIX-подобных ОС.Каждому процессу предоставляется копия переменных env, предоставленных родительским процессом.То есть они наследуются от родительского процесса.

Тот факт, что вам нужно unset X в терминале, чтобы удалить его, означает, что либо он наследуется оболочкой из процесса терминала, либо ваша оболочкаустанавливая это.В последнем случае конкретные файлы, читаемые при запуске оболочки, зависят от оболочки.Но / etc / profile читается большинством интерактивных оболочек, так что вы можете захотеть посмотреть туда.

Вы говорите, что ваше Java-приложение запущено Tomcat, но не упомянуло, как запускается Tomcat.Это важно по причинам, которые я упомянул выше.

Обратите внимание, что macOS использует демон с именем launchd для управления большинством сервисов.Эти сервисы настраиваются через файлы "plist".Смотри man launchd.plist.Эти файлы конфигурации launchd поддерживают определение пользовательских переменных env.Это немного необычно, но стоит посмотреть.Посмотрите, есть ли в файлах ~ / Library / LaunchAgents , / Library / LaunchAgents или / Library / LaunchDaemons упоминание env var.

...