2009-05-12 8 views

Répondre

2

Je suppose que vous allez le faire avant que vous essayez d'exécuter une commande externe droite? Pourquoi ne pas au lieu simplement exécuter « VARNAME = valeur; your_original_external_command » qui temporairement la variable d'EVN.

4

Il n'y a pas construit en fonction (à ma connaissance), mais vous pouvez simplement utiliser

Run["set VAR=VALUE"] 

ou

!set VAR=VALUE 

à la place.

Éditer: Vous voudrez voir la documentation pour les commandes Run et RunThrough.

+0

« set » ne semble pas fonctionner, mais « l'exportation » ne (j'utilise bash sur Mac OS X.). : ~ $ export VAR cls = valeur : ~ $ echo $ cls VAR VALEUR Cependant, il ne fonctionne pas de Mathematica. Dans [15]: = Run [ "export VAR = VALUE"] Out [15] = 0 Dans [16]: = Environnement [ "VAR"] Out [16] = $ Échec Même si je définis la variable à partir de la ligne de commande, elle ne peut pas être récupérée avec Environment []. –

3

Variables d'environnement mis en place avec Run ou RunThrough n'affecteront pas le seul noyau Mathematica lui-même, mais seront visibles aux processus lancés dans la même commande Run ou RunThrough.

Si la variable d'environnement doit être visible au processus du noyau Mathematica , le hack base gdb décrit dans la réponse acceptée à Is there a way to change another process's environment variables? peut être utilisé sous 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 ]] 
] 

Mathematica Put command est utilisé pour lancer gdb et le faire se connecter au processus noyau Mathematica. La commande gdb call (int) putenv ("var=value") est ensuite envoyée à gdb sur stdin pour configurer la variable d'environnement avec putenv.

caveat: Sous Mac OS X gdb est disponible uniquement si l'Xcode developer tools sont installés.

Questions connexes