У меня есть сценарий оболочки со списком переменных оболочки, который выполняется прежде, чем ввести среду программирования.
Я хочу использовать сценарий Perl для ввода среды программирования:
system("environment_defaults.sh");
system("obe");
Но когда я вхожу в среду, переменные не установлены.
Каждый процесс получает свою собственную среду, и каждый раз, когда вы вызываете «систему», он запускает новый процесс. Итак, то, что вы делаете, не сработает. Вам нужно будет запустить обе команды в одном процессе.
Однако имейте в виду, что после того, как ваш сценарий Perl существует, любые переменные среды, которые он устанавливает, не будут доступны вам в командной строке, потому что ваш сценарий Perl также является процессом со своей собственной средой.
Будут вызываться различные sh -c
процессы, в которых будут изолированы переменные среды.
Также не вызывает ли вызов environment_defaults.sh другой процесс sh, в котором эти переменные будут установлены изолированно?
Или запустите Perl-скрипт с экспортированными этими переменными среды, и они будут установлены для всех его дочерних процессов .
Когда вы вызываете вторую команду, это не выполняется в среде, которую вы изменили в первой команде. Фактически, не осталось среды после первой команды, потому что оболочка, использованная для вызова «environment_defaults.sh», уже завершилась.
Чтобы сохранить контекст первой команды во второй, вызывайте их в той же оболочке:
system("source environment_defaults.sh && obe");
Обратите внимание, что вам нужно вызвать сценарий оболочки с источником
, чтобы выполнить его действия в текущая оболочка, а не вызов новой оболочки для их выполнения.
Как вариант, измените среду в начале каждой оболочки (например, с помощью .bash_profile, если используется bash) или внесите изменения в переменную среды в самом perl:
$ENV{FOO} = "hello";
system('echo $FOO');