2010-07-23 14 views
5

Estoy tratando de poner un gran conjunto de comandos bash en un script de matlab y administrar mis variables (como rutas de archivos, parámetros, etc.) desde allí. También es necesario porque este flujo de trabajo requiere la intervención manual en ciertos pasos y me gustaría utilizar el depurador de pasos para esto.Usando bash shell dentro de Matlab

El problema es que no entiendo cómo interactúa matlab con bash shell. No puedo hacer system('source .bash_profile') para definir mis variables de bash. Del mismo modo, no puedo definirlos a mano y tampoco leerlos, p. Ej. system('export var=somepath') y luego system('echo $var') no devuelve nada.

¿Cuál es la forma correcta de definir variables en bash dentro de la ventana de comandos de matlab? ¿Cómo puedo construir un flujo de trabajo de comandos que usará las variables que definí, así como las de mi .bash_profile?

+2

No estoy muy seguro de cómo hacerlo, pero puedo decirle por qué no funciona. Cada vez que llamas a system() estás ejecutando un nuevo shell que se cierra inmediatamente después de que el comando finaliza. – frankc

Respuesta

6

Si todo lo que tiene que hacer es establecer las variables de entorno, hacer esto en MATLAB:

>> setenv('var','somepath') 
>> system('echo $var') 
+0

Es bueno saber que finalmente implementaron un (pseudo-) 'setenv'. – Jonas

+0

@Jonas: Lo han tenido desde 6.x ... – rubenvb

+0

@rubenvb: ¿De verdad? Supongo que la última vez que estaba buscando esta función debe haber sido 5.3. El tiempo vuela. – Jonas

3

invocación Bash como shell de registro para obtener su ~/.bash_profile de origen y utilice la opción -c para ejecutar una grupo de comandos de shell de una vez.

# in Terminal.app 
man bash | less -p 'the --login option' 
man bash | less -p '-c string' 
echo 'export profilevar=myProfileVar' >> ~/.bash_profile 

# test in Terminal.app 
/bin/bash --login -c ' 
echo "$0" 
echo "$3" 
echo "[email protected]" 
export var=somepath 
echo "$var" 
echo "$profilevar" 
ps 
export | nl 
' zero 1 2 3 4 5 


# in Matlab 
cmd=sprintf('/bin/bash --login -c ''echo "$profilevar"; ps'''); 
[r,s]=system(cmd); 
disp(s); 
Cuestiones relacionadas