3

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

$ echo $(sub-command args)

и если $(sub-command args) записывает foo в standard out, то приведенная выше команда будет эквивалентна:

$ echo foo

Есть ли в Windows 7 способ сделать это в cmd.exe?

Причина, по которой я хочу это сделать, заключается в том, что я могу легко запускать исполняемые файлы из установочного каталога npm, не имея этого каталога в моем пути:

$ $(npm bin)/grunt build

1 ответ1

0

как они уже указали в комментариях, нет никакого собственного способа сделать это с помощью 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)

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .