Как установить переменную среды в Perl?
Как установить переменную среды в Perl?
Я хочу установить $HOME
в другой каталог, чем по умолчанию.
Ответы
Ответ 1
Вы можете сделать это следующим образом:
$ENV{HOME} = 'something different';
Но учтите, что это будет иметь эффект только в остальной части вашего script. Когда ваш script завершается, вызывающая оболочка не увидит никаких изменений.
Как perldoc -v %ENV
говорит:
%ENV
Хеш %ENV
содержит текущую среду. Установка значения в "ENV" изменяет среду для любых дочерних процессов, которые вы впоследствии "fork()
" отключены.
Ответ 2
$ENV{'HOME'} = '/path/to/new/home';
Также см. perlrun
Ответ 3
Когда 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
Ответ 4
Это дрянное, но вы можете вызвать VBS script с помощью системы ( "cscript your_vbs_script" ), чтобы она обрабатывала назначение переменной среды. Он будет существовать для следующей оболочки, а не рабочей оболочки в этом случае.