Возможно ли для java.lang.Process наследовать переменные окружения от другого java.lang.Process? - PullRequest
0 голосов
/ 27 марта 2010

Я пытаюсь использовать groovy для создания сценариев оболочки на Unix, но мне не повезло, если один процесс сохранил переменные среды, измененные другим процессом. Например,

    def p1 = ["bash", "-c", "source /some/setEnv.sh"].execute()

Теперь я хотел бы, чтобы второй процесс, p2, наследовал переменные окружения, которые были установлены в p1. Как я могу это сделать? Я не вижу ничего в java.lang.Process или его расширенном расширении, которое бы выплевывало переменные среды после выполнения процесса.

Ответы [ 2 ]

1 голос
/ 27 марта 2010

Если вам нужно получить переменные среды, определенные в сценарии оболочки, сделайте что-то вроде этого:

def p = ["bash", "-c", "source /some/setEnv.sh ; somecmd /foo/bar"].execute()

Это запустит somecmd с переменными среды, определенными /some/setEnv.sh.

Более сложной альтернативой может быть:

  1. Запуск bash -c source ; env с Java
  2. Анализ выходных данных выше, чтобы извлечь эффективные переменные среды и превратить их в карту переменных среды Java.
  3. Создайте / запустите процесс, который вы назвали p2, в новой среде.

Важно понимать, что это является следствием того, как работает UNIX / Linux, , а не недостатка API-интерфейсов Java. UNIX / Linux говорят, что «область видимости» переменных среды - это процесс на уровне ОС, и что один процесс не может прочитать или установить переменные среды другого процесса. Единственный момент, когда происходит передача состояния переменной среды из одного процесса в другой, - это когда создается дочерний процесс.

1 голос
/ 27 марта 2010

Нет.Вам нужно, чтобы второй процесс выполнялся с первого (т. Е. С установкой переменных среды).

Задумывались ли вы о

  1. встраивании скрипта, устанавливающего переменные env во второмprocess?
  2. получение первого процесса, который устанавливает переменные среды, выгружает их и заставляет процесс Java читать их и устанавливать переменные при вызове второго процесса (через Runtime.exec ),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...