2009-05-12 22 views

Antwort

2

Ich gehe davon aus, dass Sie dies tun werden, bevor Sie versuchen, einen externen Befehl auszuführen, richtig? Warum nicht stattdessen einfach "VARNAME = value; your_original_external_command" ausführen, das die evn-Variable vorübergehend setzt.

4

Es gibt keinen in Funktion (meines Wissens) gebaut, aber man kann nur

Run["set VAR=VALUE"] 

oder

!set VAR=VALUE 

stattdessen verwenden.

Bearbeiten: Sie möchten die Dokumentation für die Run und RunThrough Befehle sehen.

+0

"Set" scheint nicht zu funktionieren, aber "Export" tut (Ich verwende Bash unter Mac OS X). : ~ cls $ export VAR = WERT : ~ cls $ echo $ VAR VALUE Allerdings funktioniert es nicht von Mathematica. In [15]: = Run [ "export VAR = WERT"] Out [15] = 0 In [16]: = Environment [ "VAR"] Out [16] = $ fehlgeschlagen Auch wenn ich die Variable über die Befehlszeile einstelle, kann sie nicht mit Environment [] abgerufen werden. –

3

Umgebungsvariablen mit Run oder RunThrough wird keinen Einfluss auf die Mathematica Kernel selbst, sondern wird nur sichtbar auf Prozesse gestartet innerhalb derselben Run oder RunThrough Befehl einrichten.

SetEnvironment[var_String, value_String] := Module[{valueEscaped, cmd}, 
    valueEscaped = StringTake[ToString[CForm[value]], {2, -2}]; 
    cmd = "call (int) putenv (\"" <> var <> "=" <> valueEscaped <> "\")"; 
    Put[OutputForm[cmd], "!gdb -n \"" <> First[$CommandLine] <> "\" " <> ToString[$ProcessID ]] 
] 

Die MathematicaPut:

Wenn die Umgebungsvariablen auf den Mathematica Kernel Prozess sichtbar sein sollen, der gdb basierten Hack in der akzeptierten Antwort auf Is there a way to change another process's environment variables? beschrieben kann unter Mac OS X verwendet werden Befehl wird verwendet, um gdb zu starten und sich an den Kernel-Prozess Mathematica anhängen zu lassen. Der gdb-Befehl call (int) putenv ("var=value") wird dann an gdb on stdin gesendet, um die Umgebungsvariable mit putenv einzurichten.

Vorbehalt: Unter Mac OS X ist gdb nur verfügbar, wenn die Xcode developer tools installiert sind.