在 Bash 上,我可以使用子 shell 将一个命令的结果填充到下一个命令中:
$ echo $(sub-command args)
Run Code Online (Sandbox Code Playgroud)
如果$(sub-command args)写入foo标准输出,则上述命令等效于:
$ echo foo
Run Code Online (Sandbox Code Playgroud)
Windows 7 有办法做到这一点cmd.exe吗?
我想这样做的原因是我可以轻松地从 npm 的安装目录中运行可执行文件,而无需在我的路径中包含该目录:
$ $(npm bin)/grunt build
Run Code Online (Sandbox Code Playgroud)
小智 8
正如他们在评论中已经指出的那样,没有使用 cmd 执行此操作的本机方法。但是,您可以针对您的情况使用一种技巧(因为npm bin仅返回一行):
for /F "tokens=*" %n IN ('npm bin') DO @(%n\grunt build)
Run Code Online (Sandbox Code Playgroud)
或者在批处理文件中,您必须复制%:
for /F "tokens=*" %%n IN ('npm bin') DO @(%%n\grunt build)
Run Code Online (Sandbox Code Playgroud)
您可以生成一个接收参数并运行命令的脚本,例如
:: Takes the parameters and send to npm bin output
for /f "tokens=*" %%n in ('npm bin') do @(%%n\%1 %2 %3 %4 %5)
Run Code Online (Sandbox Code Playgroud)
将其保存为 npmbin.cmd 在您的路径中,然后您可以运行:
npmbin.cmd grunt build
Run Code Online (Sandbox Code Playgroud)
对于您的情况,您应该能够使用 invoke-expression cmdlet 通过 powershell 调用它:
iex "$(npm bin)\grunt build"
Run Code Online (Sandbox Code Playgroud)
我现在没有 npm,但我用其他程序进行了测试,看起来它可以工作。
不管怎样,我认为前面的都是非常复杂的“解决方案”,而你只想简化你的命令。我想知道您是否可以创建一个全局变量,然后NPMBIN将其用于您的命令:
%NPMBIN%\grunt build
Run Code Online (Sandbox Code Playgroud)
要扩展此功能,您可以设置一个任务,使用setx以下命令以编程方式为您的用户(或最终计算机)设置它:
for /f "tokens=*" %%n in ('npm bin') do @(setx NPMBIN %%n)
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。问候
| 归档时间: |
|
| 查看次数: |
7572 次 |
| 最近记录: |