Tengo un problema menor: la solución es trivial, pero quería saber por qué existe el problema. Tengo algunas variables de entorno configuradas en .bashrc:
export FREESURFER_HOME=/usr/local/freesurferEn mi archivo startup.m, traté de establecer la variable:
freesurfer_home=getenv('FREESURFER_HOME');Sin embargo, esta llamada a getenv devuelve una matriz de caracteres vacía. Las llamadas a getenv dentro de MATLAB devuelven algunas variables de entorno (por ejemplo, getenv('HOME')) pero no otras. Puedo ver qué variables de entorno son visibles para MATLAB desde la siguiente línea:
map = java.lang.System.getenv();También puedo confirmar que los valores faltantes son visibles, al menos dentro del shell, usando cualquiera de
export env printenv¿Hay una explicación para esta discrepancia?
Si verifica el árbol de procesos con el sistema y el comando ps f en Matlab, verá que en realidad inicia sh y ejecuta allí su comando. No tengo Matlab, lo mismo con 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 En este caso, las variables configuradas en .bashrc están disponibles a través de getenv cuando ejecuto octave desde bash. Pero al iniciar Matlab desde el selector de menús, la situación es diferente:
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 no se ha ejecutado y las exportaciones desde .bashrc no están configuradas.