让我们考虑以下perl脚本:
#!/usr/bin/perl
system("C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/Tools/VsDevCmd.bat");
system("msbuild");
第一次调用system
所调用的批处理文件应该设置一些环境变量,以便可以在第二次system
调用中找到 msbuild 可执行文件。 / p>
运行此perl脚本时,出现以下错误:
'msbuild'不被识别为内部或外部命令, 可操作的程序或批处理文件。
因此,似乎批处理文件中设置的环境变量不可用于perl脚本的上下文。我该怎么做才能使这项工作成功?
注释1
首先从控制台窗口运行批处理文件,然后运行msbuild
可以正常工作。因此,批处理文件可以按预期工作,并且 msbuild 实际上可用。
注释2
我的实际perl脚本要长得多。这里的示例非常简化,可以重现该问题。因此,例如,我无法轻松地用批处理文件替换perl脚本。
注释3
有趣的是:我已经使用这个Perl脚本一两年了,没有任何问题。然后突然停止了工作。
答案 0 :(得分:4)
system()
创建一个新环境。因此,当您调用system()
来设置环境时,它将启动具有新环境的新子流程。然后,您的批处理程序将更改此新环境。但是随后子流程退出,其环境不再存在-随之进行所有更改。
在运行Perl程序之前,您需要在父进程中运行批处理文件。