Подтвердить что ты не робот

System.getenv() возвращает null, когда существует переменная среды

Я пытаюсь 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, и он сработает!

4b9b3361

Ответ 1

Ответ на этот вопрос является более общим, чем просто System.getenv() в Java.

Переменные окружения идут вниз по дереву процессов и только при запуске процесса. Eclipse - это дочерний процесс вашей оболочки, следовательно, он унаследовал все переменные среды, которые были определены в вашей оболочке при запуске Eclipse.

Вы, вероятно, определили переменную окружения в своей оболочке после того, как запустили Eclipse. Следовательно, Eclipse и дочерние процессы Java, которые он создал, никогда не будут "знать" о вашей новой переменной среды.

Благодаря такому поведению, на самом деле решение здесь состоит в том, чтобы выйти из Eclipse и снова запустить его из вашей оболочки, в которой переменная среды уже определена. Другой вариант - перейти к конфигурации запуска проекта и определить там переменную среды.

PS

  1. Очевидно, что если вы перезагрузите компьютер, переменные среды, которые вы определили в вашей оболочке, не будут сохранены, просто потому что процесс оболочки, для которого вы определили переменные, исчезнет.

  2. Если вы используете bash, то, добавив команду установки переменных среды в файл ~/.bashrc, который выполняется при каждом запуске процесса bash, вы можете смоделировать поведение постоянных переменных среды.

  3. Существуют дополнительные способы определения постоянных переменных среды. Вы можете посмотреть здесь для получения дополнительной информации.