2010-07-23 12 views
5

Sto provando a inserire un ampio set di comandi di bash in uno script MATLAB e a gestire le mie variabili (come percorsi di file, parametri ecc.) Da lì. È anche necessario perché questo flusso di lavoro richiede l'intervento manuale in determinati passaggi e mi piacerebbe utilizzare il debugger di passi per questo.Utilizzo di shell bash all'interno di Matlab

Il problema è che non capisco come le interfacce MATLAB con bash shell. Non riesco a fare system('source .bash_profile') per definire le mie variabili bash. Allo stesso modo non posso definirli a mano e leggerli entrambi, ad es. system('export var=somepath') e quindi system('echo $var') non restituisce nulla.

Qual è il modo corretto di definire le variabili in bash nella finestra di comando di matlab? Come posso costruire un flusso di lavoro di comandi che userà le variabili che ho definito così come quelle nel mio .bash_profile?

+2

io non sono del tutto sicuro di come fare questo, ma posso dirvi il motivo per cui non funziona. Ogni volta che chiamate system() state eseguendo una nuova shell che esce immediatamente dopo che il comando è stato eseguito. – frankc

risposta

6

Se tutto quello che dovete fare è impostare le variabili di ambiente, fare questo in MATLAB:

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

Buono a sapersi che finalmente hanno implementato un (pseudo-) 'setenv'. – Jonas

+0

@Jonas: Hanno avuto questo dal 6.x ... – rubenvb

+0

@rubenvb: Davvero? Suppongo che l'ultima volta che stavo cercando questa funzione deve essere stata 5.3 allora. Il tempo vola. – Jonas

3

Invoke Bash come shell di login per ottenere il vostro ~/.bash_profile provenienza e utilizzare l'opzione -c per eseguire un gruppo di comandi shell in un colpo solo.

# 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); 
Problemi correlati