我需要从 Mathematica 笔记本设置环境变量。
Environment["VARIABLE"]
给出变量的值。但是也可以设置变量吗?
使用Run或RunThrough设置的环境变量不会影响Mathematica内核本身,但只会对在同一Run
或RunThrough
命令中启动的进程可见。
如果环境变量应该对Mathematica内核进程可见,则在接受的答案中描述的基于 gdb 的 hack是否有办法更改另一个进程的环境变量?可以在 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命令用于启动 gdb 并将其附加到Mathematica内核进程。然后将 gdb 命令发送到 stdin 上的 gdb 以使用putenvcall (int) putenv ("var=value")
设置环境变量。
警告:在 Mac OS X 下,gdb 仅在安装了Xcode 开发者工具后才可用。
我假设您要在尝试运行外部命令之前执行此操作,对吗?为什么不直接运行“VARNAME=value; your_original_external_command”,它将临时设置 evn 变量。