%20%E5%97%8E%EF%BC%9F.png)
在 Bash 上,我可以使用子 shell 將一個指令的結果填入下一個指令中:
$ echo $(sub-command args)
如果$(sub-command args)
寫入foo
標準輸出,則上述命令相當於:
$ echo foo
Windows 7 有辦法做到這一點嗎cmd.exe
?
我想這樣做的原因是這樣我可以輕鬆地從 npm 的安裝目錄運行可執行文件,而無需在我的路徑中包含該目錄:
$ $(npm bin)/grunt build
答案1
正如他們在評論中已經指出的那樣,沒有使用 cmd 執行此操作的本機方法。但是,您可以針對您的情況使用一種技巧(因為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)
希望能幫助你。問候