%20do%20Bash%20no%20Windows%3F.png)
No Bash, posso usar um subshell para preencher o resultado de um comando no próximo:
$ echo $(sub-command args)
e se $(sub-command args)
escrito foo
como padrão, o comando acima seria equivalente a:
$ echo foo
O Windows 7 tem uma maneira de fazer isso cmd.exe
?
A razão pela qual quero fazer isso é para poder executar facilmente executáveis do diretório de instalação do npm sem ter esse diretório no meu caminho:
$ $(npm bin)/grunt build
Responder1
como já afirmaram nos comentários, não existe uma maneira nativa de fazer isso com o cmd. No entanto, existe um hack que você pode usar para o seu caso (já que npm bin
retorna apenas uma linha):
for /F "tokens=*" %n IN ('npm bin') DO @(%n\grunt build)
ou dentro de um arquivo em lote você deve duplicar %
:
for /F "tokens=*" %%n IN ('npm bin') DO @(%%n\grunt build)
Alternativas
Lote
Você poderia gerar um script que recebe o parâmetro e executa o comando, algo como
:: Takes the parameters and send to npm bin output
for /f "tokens=*" %%n in ('npm bin') do @(%%n\%1 %2 %3 %4 %5)
Salve-o como npmbin.cmd no seu caminho e você poderá executar:
npmbin.cmd grunt build
Powershell
Para o seu caso, você poderá invocá-lo através do PowerShell usando o cmdlet activate-expression:
iex "$(npm bin)\grunt build"
Não tenho o npm comigo agora, mas testei com outro programa e parece que funcionaria.
Variável de ambiente
De qualquer forma, acho que as anteriores são "soluções" muito complicadas, enquanto você deseja apenas simplificar seu comando. Eu queria saber se você poderia criar uma variável global, digamos, NPMBIN
e usá-la para seus comandos:
%NPMBIN%\grunt build
Para estender isso, você pode configurar uma tarefa para configurá-la programaticamente para o seu usuário (ou eventualmente para o computador) usando setx
algum lote como:
for /f "tokens=*" %%n in ('npm bin') do @(setx NPMBIN %%n)
Espero que ajude. Cumprimentos