MATLAB getenv无法找到一些linux环境变量

时间:2014-01-14 17:43:22

标签: linux matlab shell environment-variables

我有一个小问题 - 解决方法很简单,但我想知道问题存在的原因。我在.bashrc中设置了一些环境变量:

export FREESURFER_HOME=/usr/local/freesurfer

在我的startup.m文件中,我尝试设置变量:

freesurfer_home=getenv('FREESURFER_HOME');

但是,对getenv的这个调用会返回一个空字符数组。在MATLAB中调用getenv会返回一些环境变量(例如,getenv('HOME'))而不是其他环境变量。我可以从以下行看到MATLAB可以看到哪些环境变量:

 map = java.lang.System.getenv();

我还可以使用

中的任何一个来确认缺失值是否可见,至少在shell中是可见的
export
env
printenv

这种差异是否有解释?

1 个答案:

答案 0 :(得分:2)

如果在Matlab中使用systemps f命令检查进程树,您将看到它实际启动sh并在那里执行您的命令。我没有Matlab,与Octave一样。

octave:1> system("ps f")
  PID TTY      STAT   TIME COMMAND
 2520 pts/0    Ss     0:00 bash
 2580 pts/0    Sl+    0:02  \_ octave
 2885 pts/0    S+     0:00      \_ sh -c ps f
 2886 pts/0    R+     0:00          \_ ps f
ans = 0

在这种情况下,.bashrc中设置的变量可以通过getenv获得,因为我从bash启动了八度音阶。但是当从菜单启动器启动Matlab时,情况就不同了:

octave:1> system("ps f")
  PID TTY      STAT   TIME COMMAND
 3400 pts/2    Ssl+   0:01 /usr/bin/octave
 3444 pts/2    S+     0:00  \_ sh -c ps f
 3445 pts/2    R+     0:00      \_ ps f

bash尚未执行,.bashrc的导出未设置。