У меня есть пакетный скрипт setEnv.bat
, который устанавливает переменные окружения, такие как TEST_ENV
, true
.переменная среды Windows не установлена при вызове из сценария Perl
Я называю этот пакетный скрипт внутри сценария Perl, как:
my $batch_cmd = "setEnv.bat";
system($batch_cmd);
Я запустить скрипт на Perl из командной строки. Значение setEnv.bat
задает переменную окружения. После завершения сценария Perl, если я сделаю set TEST
, выход будет
Переменная среды TEST не определена.
Это означает, что переменная окружения теряется при завершении пакетного скрипта и выполнении в сценарии Perl.
Как это решить?
Не странно. [Так работают подоболочки] (http://stackoverflow.com/questions/1552814/why-arent-a-batch-files-environment-variables-set-when-run-from-perl). Вы разрешаете это, устанавливая свою среду так, как хотите, прежде чем вы вызовете свой сценарий Perl или манипулируете '% ENV' в своем скрипте Perl. – mob
Моя проблема в том, что у меня есть набор пакетных файлов, которые я не знаю, что они будут делать - одна из них может установить переменную среды, одна из которых может запускать исполняемый файл, поэтому в основном мой скрипт perl полностью не знает, что внутри пакетных файлов. Мой скрипт perl запускает пакетные файлы в последовательности. Другие командные файлы, исполняющие исполняемые файлы, выполняются нормально, только те, которые устанавливают переменные env, не работают - переменные env не установлены. Теперь кто-то может сказать, почему я не пишу командный файл, который запускает последовательность пакетных файлов - мне очень сложно писать партию, чем писать программу perl. – SomeDude
Спасибо.Кажется, что переменные переменных «Определить переменные подпроцесса» - это именно то, что я ищу. И там нет конкретного ответа. Но теперь я понимаю, что программа perl не может изменить среду, в которой работает, если это не другая программа perl. но голосующий только ради того, что он не отступил должным образом, несправедливо. На самом деле описание проблемы так же просто, как это может быть, чтобы продемонстрировать проблему, с которой я столкнулся. – SomeDude