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上,gulp
CLI 的入口点是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 次 |
最近记录: |