Java-система.getEnv()

В Mac OSX и Linux CentOS я вставляю новую системную переменную среды (например, «MYAPP»), используя .bashrc и .bash_profile. Я даже перезагрузил свой ноутбук (mac) и сервер (linux).

Когда я использую командную строку «env», эта переменная среды отображается с правильным значением. Но каким-то образом каждый раз, когда я пытаюсь получить его в приложении Java (настольном приложении или веб-приложении, EJB или сервлете, любом другом приложении Java) в Mac или Linux, эта переменная среды («MYAPP») не извлекается.

Я попытался перебрать все переменные среды, которые может получить Java, и оказалось, что она извлекает все переменные среды, кроме «MYAPP». Это очень странно.

Кто-нибудь знает, как это решить?


person user1580651    schedule 07.08.2012    source источник
comment
Пожалуйста, опубликуйте фрагмент кода того, что вы пробовали.   -  person FThompson    schedule 07.08.2012
comment
Очевидным ответом будет то, что все, что вы используете для запуска своих Java-приложений, не использует настройки среды, связанные с учетной записью, в bashrc/bash_profile которой вы добавили переменную среды. Может быть, вы добавили их не в тот аккаунт?   -  person Stephen C    schedule 07.08.2012


Ответы (4)


Вы export MYAPP=...? Экспорт переменной делает ее доступной для дочерних процессов, таких как java, запускаемый вашей оболочкой.

person pb2q    schedule 07.08.2012

В Linux, если вы устанавливаете переменную (или экспортируете ее) только в сеансе bash, он будет доступен для своего рода «подсеанса», который доступен только для только что выполненной команды и ничего больше.

Вероятно, вы могли бы использовать оператор точки в bash (также называемый командой "source"). Со страницы:

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

Так что можно попробовать сделать. export VARIABLE=value, а затем запустите вашу Java-программу. Это похоже на установку переменной в терминале Windows, а затем открытие нового терминала и ожидание наличия там переменной env. Это не будет.

Таким образом, вы сообщаете bash, что «эта команда должна быть доступна в этом конкретном сеансе (процессе сеанса)». В противном случае вы говорите ему «установить этот env var для сеанса bash, который завершится после того, как я выполню эту команду экспорта», поэтому он не будет существовать, когда вы запустите свою программу Java.

person Acapulco    schedule 07.08.2012

После определения и экспорта переменной среды. Запустите IDE из того же терминала.

person tutak    schedule 31.12.2013

Попробуйте написать

"$System.env.STOREPWD"

person 郑松岚    schedule 29.02.2016