相當於 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 執行此操作的本機方法。但是,您可以針對您的情況使用一種技巧(因為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)

希望能幫助你。問候

相關內容