%20de%20Bash%20en%20Windows%3F.png)
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 foo
en 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 bin
solo 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, NPMBIN
y 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 setx
algún lote como:
for /f "tokens=*" %%n in ('npm bin') do @(setx NPMBIN %%n)
Espero eso ayude. Saludos