Equivalente ao $() do Bash no Windows?

Equivalente ao $() do Bash no Windows?

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 foocomo 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 binretorna 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, NPMBINe 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 setxalgum lote como:

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

Espero que ajude. Cumprimentos

informação relacionada