代码之家  ›  专栏  ›  技术社区  ›  Robert Hegner

通过从perl脚本调用的批处理文件设置环境变量

  •  0
  • Robert Hegner  · 技术社区  · 6 年前

    让我们考虑以下perl脚本:

    #!/usr/bin/perl
    system("C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/Common7/Tools/VsDevCmd.bat");
    system("msbuild");
    

    system 调用应该设置一些环境变量,以便 可执行文件 系统 找不到电话。

    “msbuild”未被识别为内部或外部命令,

    所以看起来批处理文件中设置的环境变量对perl脚本的上下文不可用。我能做些什么来让它工作?

    附注1

    msbuild 实际上是可用的。

    附注2

    我的实际perl脚本要长得多。这里的例子是一个大规模的简化,它允许重现问题。例如,我不能用批处理文件轻松地替换perl脚本。

    附注3

    有趣的是:我已经使用这个perl脚本一两年了,没有任何问题。然后它突然停止了工作。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Dave Cross    6 年前
    • 您的进程有一个关联的环境,其中包含搜索路径之类的内容。
    • 当子流程启动时,新流程有一个新的、独立的环境,该环境作为父流程环境的副本启动。
    • 任何进程(包括子进程)都可以改变自己的环境。但是,它们不能更改其父进程的环境。
    • 跑步 system() 创造一个新的环境。

    所以当你打电话的时候 要设置您的环境,它将用一个新的环境启动一个新的子进程。然后,批处理程序将更改此新环境。但随后子进程退出,它的环境也就不存在了——所有的变化都伴随着它。

    在运行Perl程序之前,需要在父进程中运行批处理文件。