与 Windows 上的 Bash 的 $() 等效吗?

与 Windows 上的 Bash 的 $() 等效吗?

在 Bash 上,我可以使用子 shell 将一个命令的结果填充到下一个命令中:

$ echo $(sub-command args)

如果$(sub-command args)写入foo标准输出,则上述命令相当于:

$ echo foo

Windows 7 有办法做到这一点吗cmd.exe

我这样做的原因是我可以轻松地从 npm 的安装目录运行可执行文件,而无需将该目录放在我的路径上:

$ $(npm bin)/grunt build

答案1

正如他们在评论中所述,没有使用 cmd 执行此操作的本机方法。但是,您可以针对您的情况使用一种 hack(因为npm bin只返回一行):

for /F "tokens=*" %n IN ('npm bin') DO @(%n\grunt build)

或者在批处理文件中复制%

for /F "tokens=*" %%n IN ('npm bin') DO @(%%n\grunt build)

备择方案

您可以生成一个接收参数并运行命令的脚本,例如

:: Takes the parameters and send to npm bin output
for /f "tokens=*" %%n in ('npm bin') do @(%%n\%1 %2 %3 %4 %5)

将其保存为 npmbin.cmd 在你的路径下,然后你可以运行:

npmbin.cmd grunt build

电源外壳

对于您的情况,您应该能够使用invoke-expression cmdlet通过powershell调用它:

iex "$(npm bin)\grunt build"

我现在没有 npm,但我用其他程序测试过,看起来它可以工作。

环境变量

无论如何,我认为前面的“解决方案”非常复杂,而您只想简化命令。我想知道您是否可以创建一个全局变量,然后将NPMBIN其用于您的命令:

%NPMBIN%\grunt build

为了扩展此功能,您可以设置一个任务,以编程方式为您的用户(或最终是计算机)设置它setx,使用一些批处理,例如:

for /f "tokens=*" %%n in ('npm bin') do @(setx NPMBIN %%n)

希望对您有所帮助。问候

相关内容