gpt4 book ai didi

node.js - 如何在PowerShell中取消 “Terminate batch job (Y/N)”确认?

转载 作者:IT老高 更新时间:2023-10-28 23:08:31 26 4
gpt4 key购买 nike

当我在PowerShell中按Ctrl + C时,我收到:

Terminate batch job (Y/N)?



https://superuser.com/questions/35698/how-to-supress-terminate-batch-job-y-n-confirmation相似,但Windows PowerShell除外。

与CMD相比,PowerShell是否提供对批处理作业的更多控制?

最佳答案

行为既不是由PowerShell引起的,也不是PowerShell可以将其更改为(由PowerShell source-code repo不包含提示消息所证明)。
行为内置在cmd.exe-在这种情况下,Powershell会调用.cmd文件(批处理文件),该文件由cmd.exe解释。

  • 如果您明确控制目标可执行文件的调用,则可以通过移至Powershell 来解决此问题-请注意,这有其自身的考虑因素,请参见下文。
  • 如果您没有显式控制目标可执行文件的调用,那么(除非您愿意安装第三方cmd.exe替代品)不走运,并且必须按Ctrl + C两次才能终止执行。
  • 一种不建议使用的解决方法是修改cmd.exe二进制文件-请参阅article with instructions on how to patch the cmd.exe executable in order to suppress the prompt。此外,您可以在GitHub上发布功能请求,以请求在源头修复此行为,尽管由于向后兼容的原因不太可能发生这种情况。

  • 为了演示该行为:
    这些示例假定已安装Node.js,因此 node.exe在您的PATH中:
    首先,使用紧密循环直接调用 node.exe,这需要您按Ctrl + C来终止该过程。
    PS> node -e "while (true);"
    就像您将看到的那样,按Ctrl + C会立即终止该过程-没有确认提示。
    现在,让我们创建一个示例批处理文件,它调用相同的命令并调用该批处理文件:
    PS> "@echo off`nnode -e `"while (true);`"" | Set-Content test.cmd
    PS> ./test.cmd
    就像您将看到的那样,现在按Ctrl + C会显示不希望的 Terminate batch job (Y/N)?提示。 (如果从 cmd.exe运行批处理文件,您将得到相同的行为。)
    为了证明 gulpcmd文件,请执行以下操作:
    您说您正在通过 gulp 的CLI运行命令。
    在Windows上,gulp CLI的入口是gulp.cmd-即批处理文件。 这通常适用于以JS文件或Shell脚本实现的 npm -package“binaries”(可执行文件)。 gulp调用 gulp.cmd可以验证如下:
    # Execute from a project folder that has `gulp` installed as a dependency.
    # If `gulp` is installed *globally*
    # Note: CLI `npx` requires npm version 5.2.0+
    PS C:\some\NodeJs\project> npx where gulp
    您会看到类似以下内容的内容:
    C:\some\NodeJs\project\node_modules\.bin\gulp
    C:\some\NodeJs\project\node_modules\.bin\gulp.cmd
    注意 where.exe也列出了无扩展的Unix-shell脚本 ...\gulp;但是,从 cmd.exe/Powershell起,这样的shell脚本不能直接执行,而是执行的是 ...\gulp.cmd-批处理文件。
    (如果有疑问,请在 @set /p dummy="Press a key"文件的开头放置诸如 gulp.cmd之类的命令,当您调用不带 gulp扩展名的 .cmd时,您会看到此命令会执行。
    另请注意,没有 gulp.exe。)
    更一般而言,在Windows上,项目的 node_modules\.bin子文件夹包含该项目在本地依赖的软件包随附的CLI的成对CLI入口点:
  • node_modules\.bin\<some-cli>是Unix shell脚本(其执行解释器通过其shebang line控制)。
  • node_modules\.bin\<some-cli>.cmd是Windows的帮助程序批处理文件。

  • future 考虑因素:
    在npm模块的上下文中,如果将PowerShell脚本( *.ps1)用作Windows上的帮助程序脚本,则该问题将消失。有 npmyarn和类似软件的票据可用于执行此操作。还有一些缺点:

    不能从PowerShell外部直接执行
  • *.ps1文件,尤其是从cmd.exe和File Explorer(以及不重要​​的更改)中直接执行这些文件。
  • 从Windows 10开始,PowerShell仍未完全取代cmd.exe作为默认 shell 。

  • 当从PowerShell调用时,将找到一个 *.ps1文件并在进程中运行,因此目前可能的妥协是 npm项目还提供 *.ps1帮助程序脚本,该脚本优先于同名的 *.cmd文件。
  • 更新:Dario指出,替代软件包管理器 yarn 现在确实包含*.ps1脚本,因此从PowerShell中运行它可以解决该问题。
  • 关于node.js - 如何在PowerShell中取消 “Terminate batch job (Y/N)”确认?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39085380/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com