Эквивалент $() из Bash в Windows?

Эквивалент $() из Bash в Windows?

В Bash я могу использовать подоболочку, чтобы вставить результат одной команды в следующую:

$ 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

Powershell

В вашем случае вы сможете вызвать его через PowerShell, используя командлет invoke-expression:

iex "$(npm bin)\grunt build"

Сейчас у меня нет npm, но я протестировал его с другой программой, и, похоже, это сработает.

Переменная среды

В любом случае, я думаю, что предыдущие - очень сложные "решения", в то время как вы просто хотите упростить свою команду. Мне было интересно, можно ли создать глобальную переменную, скажем, NPMBINи затем использовать ее для своих команд:

%NPMBIN%\grunt build

Чтобы расширить это, вы можете настроить задачу, чтобы задать ее программно для вашего пользователя (или, в конечном счете, для компьютера), используя setx, например, пакет:

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

Надеюсь, это поможет. С уважением.

Связанный контент