2010-07-23 149 views
5

我試圖把一大堆bash命令放到matlab腳本中,並從那裏管理我的變量(如文件路徑,參數等)。這也是需要的,因爲這個工作流程需要在某些步驟中手動干預,我想使用這個步驟調試器。在Matlab中使用bash shell

問題是,我不明白matlab如何與bash shell接口。 我不能做system('source .bash_profile')來定義我的bash變量。同樣,我無法用手定義它們,也可以閱讀它們,例如system('export var=somepath')然後system('echo $var')什麼也沒有返回。

在matlab的命令窗口中,在bash中定義變量的正確方法是什麼?我如何構建一個將使用我定義的變量以及我的.bash_profile中的變量的命令工作流程?

+2

我不太確定如何做到這一點,但我可以告訴你爲什麼它不起作用。每次調用system()時,都會執行一個新的shell,在命令完成後立即退出。 – frankc 2010-07-23 21:11:03

回答

6

如果你需要做的是設置環境變量,爲此在MATLAB:

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

很高興知道他們終於實現了(僞)'setenv'。 – Jonas 2010-07-24 07:14:21

+0

@Jonas:他們自6.x以來就有過這個... – rubenvb 2010-07-24 15:09:30

+0

@rubenvb:真的嗎?我想我最後一次尋找這個功能的時間肯定是5.3。時光飛逝。 – Jonas 2010-07-24 15:55:07

3

調用bash作爲登錄shell,讓您的〜/ .bash_profile中採購並使用-c選項來執行一組shell命令一氣呵成。

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