2009-05-12 5 views

risposta

2

Suppongo che lo farai prima di provare a eseguire un comando esterno, giusto? Perché non eseguire semplicemente "VARNAME = value; your_original_external_command" che imposterà temporaneamente la variabile evn.

4

Non c'è nessun costruito in funzione (a mia conoscenza), ma si può semplicemente utilizzare

Run["set VAR=VALUE"] 

o

!set VAR=VALUE 

invece.

Modifica: Verrà visualizzata la documentazione per i comandi Run e RunThrough.

+0

"set" non sembra funzionare, ma "export" funziona (sto usando bash su Mac OS X). : ~ cls $ export VAR = VALORE : ~ cls $ echo $ VAR VALUE Tuttavia, non funziona da Mathematica. In [15]: = Run [ "export VAR = VALORE"] Out [15] = 0 In [16]: = Ambiente [ "VAR"] Out [16] = $ riuscita Anche se imposto la variabile dalla riga di comando, non può essere recuperata con Ambiente []. –

3

variabili dell'ambiente, istituita con Run o RunThrough non influiranno sulla kernel di Mathematica sé, ma saranno visibili solo ai processi avviati all'interno dello stesso comando Run o RunThrough.

Se la variabile d'ambiente dovrebbe essere visibile al processo kernel Mathematica, l'hack gdb base descritto nella risposta accettato di Is there a way to change another process's environment variables? può essere utilizzato in ambiente Mac OS X:

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 ]] 
] 

Il MathematicaPut il comando è usato per lanciare gdb e farlo allegare al processo del kernel Mathematica. Il comando gdb call (int) putenv ("var=value") viene quindi inviato a gdb su stdin per impostare la variabile di ambiente con putenv.

Avvertenza: in Mac OS X gdb è disponibile solo se sono installati Xcode developer tools.