我有一个小问题 – 解决方法很简单,但我想知道问题存在的原因.我在.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
这种差异有解释吗?
最佳答案 如果在Matlab中使用
system和
ps 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
在这种情况下,当我从bash启动octave时,.bashrc中设置的变量可以通过getenv获得.但是当从菜单启动器启动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的导出.