2010-07-23 44 views
5

Tôi đang cố gắng đặt một lượng lớn lệnh bash vào tập lệnh matlab và quản lý các biến của tôi (như đường dẫn tệp, tham số, v.v) từ đó. Điều này cũng cần thiết vì quy trình làm việc này yêu cầu can thiệp thủ công ở một số bước nhất định và tôi muốn sử dụng trình gỡ rối bước cho việc này.Sử dụng bash shell bên trong Matlab

Vấn đề là, tôi không hiểu cách giao diện MATLAB với bash shell. Tôi không thể làm system('source .bash_profile') để xác định các biến bash của tôi. Tương tự, tôi không thể xác định chúng bằng tay và đọc chúng, ví dụ: system('export var=somepath') và sau đó system('echo $var') không trả về kết quả nào.

Cách chính xác để xác định các biến trong bash bên trong cửa sổ lệnh của MATLAB là gì? Làm thế nào tôi có thể xây dựng một luồng công việc của các lệnh sẽ sử dụng các biến tôi đã định nghĩa cũng như các biến trong tệp .bash_profile của tôi?

+2

Tôi không chắc chắn cách thực hiện điều này nhưng tôi có thể cho bạn biết lý do tại sao nó không hoạt động. Mỗi khi bạn gọi hệ thống() bạn đang thực hiện một trình bao mới thoát ngay lập tức sau khi lệnh được thực hiện. – frankc

Trả lời

6

Nếu tất cả các bạn cần làm là thiết lập biến môi trường, làm điều này trong MATLAB:

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

Điều cần biết là cuối cùng họ đã triển khai (setsev) 'pseudo- '. – Jonas

+0

@ Jason: Họ đã có điều này kể từ 6.x ... – rubenvb

+0

@rubenvb: Thật sao? Tôi đoán thời gian qua tôi đã tìm kiếm chức năng này phải có được 5.3 sau đó. Thời gian trôi qua. – Jonas

3

Gọi Bash như một vỏ đăng nhập để có được bạn ~/.bash_profile nguồn gốc và sử dụng tùy chọn -c để thực hiện một nhóm các lệnh shell trong một lần.

# 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); 
Các vấn đề liên quan