%20%D0%B8%D0%B7%20Bash%20%D0%B2%20Windows%3F.png)
В 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)
Надеюсь, это поможет. С уважением.