2016-08-13 2 views
2

Ich muss einige Umgebungsvariablen festlegen, bevor ich einen Befehl auf einer Windows-Maschine ausführen, die es in einem Ruby-Skript aufruft. Unter Linux können SieRuby Systemaufruf mit Umgebungsvariablen in Windows

cmd = 'echo $FOO' 
system({'FOO' => '123'}, cmd) 

OUTPUT is "123" 

Aber auf Windows tun dies nicht der Fall funktioniert, wird der Ausgang auf Windows rubinSystemAufrufe $ FOO

Wie kann ich eine Umgebungsvariable gesetzt. Ich habe mehrere Varianten von ENV und habe Fehler oder funktioniert immer noch nicht.

system({$ENV[:VAR1] => "WIN7"}, 'echo $ENV[:VAR1]') 
+0

Was ist der Befehl, den Sie Ihre Shell zu erteilen sind versuchen? –

+0

Ich versuche, auf die Umgebungsvariablen zuzugreifen, wie in dem Beispiel angegeben, das Windows verwendet $ ENV [: var], aber der Zugriff auf diese Umgebungsvariable scheint nicht zu funktionieren. – ibaralf

Antwort

3

Rubys system() aufruft, was die Standard-Shell-Host ist, so müssen Sie, dass Shell die Sprache sprechen. Die Standard-Shell unter Windows ist cmd.exe, wobei die Umgebungsvariable FOO als referenziert werden muss, um erweitert werden

So soll Ihr Code sein:

cmd = 'echo %FOO%' 
system({'FOO' => '123'}, cmd) 
+0

Hallo Mkelement, mit gewöhnlichen Variablen, ja es funktioniert gut, aber was ich versuchte zu tun, war die Verwendung der Umgebungsvariablen (ENV). Ist das sinnvoll? Entschuldigung, wenn ich nicht ganz klar war. – ibaralf

+0

@Wibralf: In 'cmd.exe' sind _all_ Variablen _Umgebung_Variablen, daher bezieht sich'% FOO% 'tatsächlich auf die Umgebungsvariable' FOO'. – mklement0