代码之家  ›  专栏  ›  技术社区  ›  David Dawson

在运行批处理文件中的下一行之前,使命令等待确认

  •  1
  • David Dawson  · 技术社区  · 7 年前

    我到处寻找我认为是一个常见问题的答案,但只能找到关于用户确认的答案,而不能找到系统确认的答案。

    我希望以下命令按顺序运行,在转到下一个命令之前等待响应:

    npm config set https-proxy http://example.com:8080
    npm config set proxy http://example.com:8080
    npm config set sslVerify false
    npm config set strict-ssl false
    set HTTP_PROXY=http://example.com:8080
    set HTTPS_PROXY=http://example.com:8080
    

    我已将命令按顺序添加到批处理文件的新行中,但执行时不会在每个命令上暂停以等待响应。如何强制脚本等待每个命令,直到系统确认为止?

    1 回复  |  直到 7 年前
        1
  •  1
  •   jwdonahue    7 年前

    非限定名称,如 npm doSomething 可以映射到以各种语言编写的脚本,包括批处理文件。使用 call 命令调用这些和cmd。exe将始终等待启动任何子进程。

    这种情况并不少见 .exe 将分散在多个目录中,这会使path环境变量膨胀,因此许多安装会在添加到path的单个目录中放置alias脚本,当您调用该命令时,它会找出要运行的可执行文件并启动这些文件。

    使用包装器脚本简化可执行调用、添加一些日志记录或将命令临时映射到不同版本(升级/测试)也是很常见的。

    就npm而言,我相信它主要是用JavaScript编写的,因此必须启动适当的脚本引擎来运行npm命令。这可以从批处理脚本引导,也可以由操作系统根据其具有的任何文件扩展名自动调用。从一个版本或安装到下一个版本或安装的详细信息可能会有所不同,通常对于从命令行调用它们的普通用户来说并不重要,但脚本行为可能会有明显的不同。

    除非使用完全限定的路径/文件名从命令脚本启动某些内容,而且通常即使这样做,也应该默认使用 呼叫 命令来调用它。然后,所有上述情况都将被涵盖,您的脚本将始终按预期运行。

    call npm config set https-proxy http://example.com:8080
    call npm config set proxy http://example.com:8080
    call npm config set sslVerify false
    call npm config set strict-ssl false
    set HTTP_PROXY=http://example.com:8080
    set HTTPS_PROXY=http://example.com:8080
    

    请注意,脚本或程序仍有可能将工作传递给另一个进程,然后立即返回,但这种行为通常是相同的,无论是以交互方式启动还是从脚本启动。