¿Equivalente a $() de Bash en Windows?

¿Equivalente a $() de Bash en Windows?

En Bash, puedo usar un subshell para completar el resultado de un comando en el siguiente:

$ echo $(sub-command args)

y si $(sub-command args)se escribe fooen formato estándar, entonces el comando anterior sería equivalente a:

$ echo foo

¿Windows 7 tiene alguna forma de hacer esto cmd.exe?

La razón por la que quiero hacer esto es para poder ejecutar fácilmente archivos ejecutables desde el directorio de instalación de npm sin tener ese directorio en mi ruta:

$ $(npm bin)/grunt build

Respuesta1

Como ya dijeron en los comentarios, no existe una forma nativa de hacer esto con cmd. Sin embargo, hay un truco que puedes usar para tu caso (ya que npm binsolo devuelve una línea):

for /F "tokens=*" %n IN ('npm bin') DO @(%n\grunt build)

o dentro de un archivo por lotes tienes que duplicar %:

for /F "tokens=*" %%n IN ('npm bin') DO @(%%n\grunt build)

Alternativas

Lote

Podría generar un script que reciba el parámetro y ejecute el comando, algo así como

:: Takes the parameters and send to npm bin output
for /f "tokens=*" %%n in ('npm bin') do @(%%n\%1 %2 %3 %4 %5)

Guárdelo como npmbin.cmd en su ruta, luego podrá ejecutar:

npmbin.cmd grunt build

Potencia Shell

Para su caso, debería poder invocarlo a través de PowerShell usando el cmdlet invoke-expression:

iex "$(npm bin)\grunt build"

No tengo npm en este momento, pero lo probé con otro programa y parece que funcionaría.

Variable ambiental

De todos modos, creo que las anteriores son "soluciones" muy complicadas, mientras que tú sólo quieres simplificar tu comando. Me preguntaba si podrías crear una variable global, por ejemplo, NPMBINy luego usarla para tus comandos:

%NPMBIN%\grunt build

Para ampliar esto, puede configurar una tarea para configurarla mediante programación para su usuario (o eventualmente la computadora) usando setxalgún lote como:

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

Espero eso ayude. Saludos

información relacionada