mik*_*ana 16 powershell job-control node.js
当我在PowerShell中按Ctrl+ C时,我会收到:
终止批处理作业(是/否)?
与https://superuser.com/questions/35698/how-to-supress-terminate-batch-job-yn-confirmation类似,但Windows PowerShell除外.
PowerShell是否提供了比CMD更多的批处理作业控制?
mkl*_*nt0 10
该行为既不是由PowerShell引起的,也不是PowerShell可以更改的(由不包含提示消息的PowerShell源代码存储库证明)。
该行为是内置的cmd.exe -在这种情况下,Powershell正在调用一个.cmd文件(批处理文件),该文件由解释cmd.exe。
如果您明确控制目标可执行文件的调用,则可以通过移至Powershell来解决此问题 -注意这有其自身的考虑因素,请参见下文。
如果您没有显式控制目标可执行文件的调用,那么您将很不走运(除非您愿意安装第三方cmd.exe替代品),并且必须按Ctrl+C 两次以终止执行。
[n-ad-advised] 解决方法是修改cmd.exe二进制文件 -请参阅有关如何修补cmd.exe可执行文件以抑制提示的说明的文章。此外,您可以在GitHub上发布功能请求,以要求在源头解决此问题,尽管由于向后兼容的原因不太可能发生。
这些示例假定已安装Node.js,node.exe因此位于您的PATH中:
首先,node.exe使用紧密循环直接调用,这需要您按Ctrl+C来终止该过程。
PS> node -e "while (true);"
Run Code Online (Sandbox Code Playgroud)
就像您将看到的那样,Ctrl+C 立即按下将终止过程-没有确认提示。
现在,让我们创建一个示例批处理文件,它调用相同的命令并调用该批处理文件:
PS> "@echo off`nnode -e `"while (true);`"" | Set-Content test.cmd
PS> ./test.cmd
Run Code Online (Sandbox Code Playgroud)
就像您将看到的那样,Ctrl+C现在按会出现不需要的Terminate batch job (Y/N)?提示。(如果从运行批处理文件,您将得到相同的行为cmd.exe。)
gulp是一个cmd文件:您说您正在通过gulp的CLI 运行命令。
在Windows上,gulpCLI 的入口点是gulp.cmd-即批处理文件。这通常适用于npm以JS文件或Shell脚本实现的-package“二进制文件”(可执行文件)。
这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
Run Code Online (Sandbox Code Playgroud)
您会看到类似以下内容:
C:\some\NodeJs\project\node_modules\.bin\gulp
C:\some\NodeJs\project\node_modules\.bin\gulp.cmd
Run Code Online (Sandbox Code Playgroud)
注意,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行控制)。node_modules\.bin\<some-cli>.cmd是Windows的帮助程序批处理文件。在npm模块的上下文中,如果将PowerShell脚本(*.ps1)用作Windows上的帮助程序脚本,则问题将消失。还有门票npm,yarn和类似的软件来做到这一点。还有一些缺点:
*.ps1文件不能从PowerShell外部直接执行,特别是不能从cmd.exe文件资源管理器和文件资源管理器中直接执行(并且更改不容易)。
cmd.exe自Windows 10起,PowerShell仍未完全取代为默认外壳。
当从PowerShell调用时,*.ps1将找到一个文件并在进程中运行,因此,目前可能的折衷办法是使npm项目还提供一个*.ps1帮助程序脚本,该脚本优先于*.cmd同名文件。
| 归档时间: |
|
| 查看次数: |
4224 次 |
| 最近记录: |