%20unter%20Windows%3F.png)
Unter Bash kann ich eine Subshell verwenden, um das Ergebnis eines Befehls in den nächsten einzufügen:
$ echo $(sub-command args)
und wenn es in die Standardausgabe $(sub-command args)
geschrieben wird foo
, dann wäre der obige Befehl gleichbedeutend mit:
$ echo foo
Gibt es in Windows 7 eine Möglichkeit, dies zu tun cmd.exe
?
Der Grund für diese Vorgehensweise besteht darin, dass ich so problemlos ausführbare Dateien aus dem Installationsverzeichnis von npm ausführen kann, ohne dass sich dieses Verzeichnis in meinem Pfad befindet:
$ $(npm bin)/grunt build
Antwort1
wie bereits in den Kommentaren erwähnt, gibt es keine native Möglichkeit, dies mit cmd zu tun. Es gibt jedoch einen Hack, den Sie für Ihren Fall verwenden können (da npm bin
nur eine Zeile zurückgegeben wird):
for /F "tokens=*" %n IN ('npm bin') DO @(%n\grunt build)
oder Sie müssen in einer Batchdatei Folgendes duplizieren %
:
for /F "tokens=*" %%n IN ('npm bin') DO @(%%n\grunt build)
Alternativen
Charge
Sie könnten ein Skript generieren, das den Parameter empfängt und den Befehl ausführt, etwa so:
:: Takes the parameters and send to npm bin output
for /f "tokens=*" %%n in ('npm bin') do @(%%n\%1 %2 %3 %4 %5)
Speichern Sie es als npmbin.cmd in Ihrem Pfad, dann können Sie Folgendes ausführen:
npmbin.cmd grunt build
Power Shell
In Ihrem Fall sollten Sie es über PowerShell mit dem Cmdlet „invoke-expression“ aufrufen können:
iex "$(npm bin)\grunt build"
Ich habe npm im Moment nicht bei mir, aber ich habe es mit einem anderen Programm getestet und es sieht aus, als würde es funktionieren.
Umgebungsvariable
Wie dem auch sei, ich denke, die vorherigen sind sehr komplizierte „Lösungen“, während Sie nur Ihren Befehl vereinfachen möchten. Ich habe mich gefragt, ob Sie beispielsweise eine globale Variable erstellen NPMBIN
und diese dann für Ihre Befehle verwenden könnten:
%NPMBIN%\grunt build
Um dies zu erweitern, können Sie eine Aufgabe einrichten, um es programmgesteuert für Ihren Benutzer (oder eventuell den Computer) festzulegen setx
, indem Sie eine Stapelverarbeitung wie folgt verwenden:
for /f "tokens=*" %%n in ('npm bin') do @(setx NPMBIN %%n)
Hoffe, es hilft. Grüße