2010-07-23 10 views
5

Ich versuche, eine große Anzahl von Bash-Befehle in einem Matlab-Skript und verwalten Sie meine Variablen (wie Dateipfade, Parameter usw.) von dort. Es wird auch benötigt, da dieser Workflow bei bestimmten Schritten manuelle Eingriffe erfordert und ich hierfür den Schritt-Debugger verwenden möchte.Verwenden von Bash Shell in Matlab

Das Problem ist, ich verstehe nicht, wie Matlab Schnittstellen mit Bash Shell. Ich kann system('source .bash_profile') nicht tun, um meine Bash-Variablen zu definieren. Ähnlich kann ich sie nicht von Hand definieren und sie auch nicht lesen, z. system('export var=somepath') und dann system('echo $var') gibt nichts zurück.

Wie ist die korrekte Definition von Variablen in bash innerhalb des Befehlsfensters von Matlab? Wie kann ich einen Workflow von Befehlen konstruieren, der sowohl die Variablen, die ich definiert habe, als auch die in meinem .bash_profile verwendet?

+2

Ich bin nicht ganz sicher, wie das geht, aber ich kann Ihnen sagen, warum es nicht funktioniert. Jedes Mal, wenn Sie system() aufrufen, führen Sie eine neue Shell aus, die unmittelbar nach dem Befehl beendet wird. – frankc

Antwort

6

Wenn alles, was Sie tun müssen, ist Umgebungsvariablen gesetzt, dies zu tun in MATLAB:

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

Gut zu wissen, dass sie endlich ein (Pseudo-) 'setenv' implementiert haben. – Jonas

+0

@Jonas: Sie hatten das seit 6.x ... – rubenvb

+0

@rubenvb: Wirklich? Ich denke, das letzte Mal, als ich nach dieser Funktion gesucht habe, muss damals 5.3 gewesen sein. Zeit vergeht. – Jonas

3

Invoke Bash als Login-Shell, um Ihre ~/.bash_profile sourced und verwenden Sie die Option -c ein auszuführen Gruppe von Shell-Befehlen auf einmal.

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