Если вам нужно получить переменные среды, определенные в сценарии оболочки, сделайте что-то вроде этого:
def p = ["bash", "-c", "source /some/setEnv.sh ; somecmd /foo/bar"].execute()
Это запустит somecmd
с переменными среды, определенными /some/setEnv.sh
.
Более сложной альтернативой может быть:
- Запуск
bash -c source ; env
с Java
- Анализ выходных данных выше, чтобы извлечь эффективные переменные среды и превратить их в карту переменных среды Java.
- Создайте / запустите процесс, который вы назвали
p2
, в новой среде.
Важно понимать, что это является следствием того, как работает UNIX / Linux, , а не недостатка API-интерфейсов Java. UNIX / Linux говорят, что «область видимости» переменных среды - это процесс на уровне ОС, и что один процесс не может прочитать или установить переменные среды другого процесса. Единственный момент, когда происходит передача состояния переменной среды из одного процесса в другой, - это когда создается дочерний процесс.