Как установить переменную окружения в Perl? - PullRequest
17 голосов
/ 17 ноября 2009

Как мне установить переменную окружения в Perl?

Я хочу установить $HOME в каталог, отличный от каталога по умолчанию.

Ответы [ 4 ]

36 голосов
/ 17 ноября 2009

Вы можете сделать это так:

$ENV{HOME} = 'something different';

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

Как perldoc -v %ENV говорит:

%ENV Хэш %ENV содержит ваше текущее окружение. Установка значения в «ENV» изменяет среду для любых дочерних процессов, которые вы впоследствии «fork()» выключаете.

8 голосов
/ 17 ноября 2009
$ENV{'HOME'} = '/path/to/new/home';

Также см. perlrun

1 голос
/ 10 июля 2013

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

Вы можете сделать это, установив внешний модуль из CPAN, который является Shell :: Source.

$env_path= Shell::Source->new(shell=>"tcsh",file=>"../path/to/file/temp.csh");
$env_path->inherit;
print "Your env path: $ENV{HOME}";

Поскольку perl создает свой собственный экземпляр во время работы на оболочке, мы не можем установить путь к среде для основной оболочки, поскольку экземпляр perl будет похож на вложенную оболочку основной оболочки. Дочерний процесс не может установить пути среды для родителей.

Теперь, пока не будет запущена вложенная оболочка perl, вы сможете получить доступ ко всем путям, присутствующим в вашем temp.csh

0 голосов
/ 11 декабря 2013

Это глупо, но вы можете вызвать скрипт VBS, используя систему ("cscript your_vbs_script"), чтобы он обрабатывал назначение переменных среды. Он будет существовать для следующей открытой оболочки, а не для запущенной в этом случае.

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