Как экспортировать переменную оболочки в рамках сценария Perl?

У меня есть сценарий оболочки со списком переменных оболочки, который выполняется прежде, чем ввести среду программирования.

Я хочу использовать сценарий Perl для ввода среды программирования:

system("environment_defaults.sh");
system("obe");

Но когда я вхожу в среду, переменные не установлены.

5
задан Håkon Hægland 13 June 2016 в 08:33
поделиться

3 ответа

Каждый процесс получает свою собственную среду, и каждый раз, когда вы вызываете «систему», он запускает новый процесс. Итак, то, что вы делаете, не сработает. Вам нужно будет запустить обе команды в одном процессе.

Однако имейте в виду, что после того, как ваш сценарий Perl существует, любые переменные среды, которые он устанавливает, не будут доступны вам в командной строке, потому что ваш сценарий Perl также является процессом со своей собственной средой.

2
ответ дан 18 December 2019 в 14:42
поделиться

Будут вызываться различные sh -c процессы, в которых будут изолированы переменные среды.

Также не вызывает ли вызов environment_defaults.sh другой процесс sh, в котором эти переменные будут установлены изолированно?

Или запустите Perl-скрипт с экспортированными этими переменными среды, и они будут установлены для всех его дочерних процессов .

2
ответ дан 18 December 2019 в 14:42
поделиться

Когда вы вызываете вторую команду, это не выполняется в среде, которую вы изменили в первой команде. Фактически, не осталось среды после первой команды, потому что оболочка, использованная для вызова «environment_defaults.sh», уже завершилась.

Чтобы сохранить контекст первой команды во второй, вызывайте их в той же оболочке:

system("source environment_defaults.sh && obe");

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

Как вариант, измените среду в начале каждой оболочки (например, с помощью .bash_profile, если используется bash) или внесите изменения в переменную среды в самом perl:

$ENV{FOO} = "hello";
system('echo $FOO');
9
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: