आप दो प्रश्न पूछ रहे हैं। मैं दोनों का जवाब दूंगा, जिसमें दूसरा ऑपरेटिंग सिस्टम (और मेरे लिए निश्चित रूप से असंभव) के आधार पर दूसरा असंभव क्यों हो सकता है, फिर एक समस्या पर निर्भर कार्यवाही पर एक सुझाव प्रदान करें।
सबसे पहले, मैं इस तरह की एक स्क्रिप्ट का उपयोग करता हूं जब मैटलैब को खोल के साथ बातचीत करने के लिए मिलता है।
[[email protected] ~]$ ./stack_ex test matlab
Warning: No window system found. Java option 'MWT' ignored
< M A T L A B (R) >
Copyright 1984-2010 The MathWorks, Inc.
Version 7.12.0.635 (R2011a) 64-bit (glnxa64)
March 18, 2011
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
>> param1 : test
param2 : matlab
>> >> >>
तो स्पष्ट रूप से स्थापित करने के वातावरण चर के दो संस्करणों में काम नहीं करता:
#!/bin/sh
cat <<EOF | matlab -nodesktop -nosplash -nodisplay
A=matlab_test('$1','$2');
system(['export temp1=' A]); %doesn't work
setenv('temp2',A); %also doesn't work, I'll explain why below
exit
EOF
echo $temp1
echo $temp2
उत्पादन देता है। यह हमें आपके दूसरे प्रश्न पर ले जाता है।
'गूंज' की विफलता के पीछे कारण यह है कि system
और setenv
मैटलैब बंद होने पर बंद किए गए गोले बनाते हैं। ऐसा कहने के लिए, मैटलैब उस खोल के बाहर पर्यावरण चर सेट नहीं कर सकता है जिसे इसे कहा जाता है।
विंडोज सिस्टम के लिए इसके लिए एक कामकाज है in this posting, जो माइक्रोसॉफ्ट से एक उपकरण का उपयोग करता है। here का भी उल्लेख किया गया।
मुझे विश्वास नहीं है कि * निक्स सिस्टम के लिए मैटलैब के भीतर से पर्यावरण चर सेट करने के लिए वर्कअराउंड है।
आपके द्वारा वर्णित कुछ के समान कुछ करने का तरीका यहां दिया गया है।
मुझे लगता है कि गूंज का उपयोग वह नहीं है जो आप वास्तव में करना चाहते हैं। इसके बजाय, मुझे लगता है कि आप पर्यावरण चर में संग्रहीत स्ट्रिंग आउटपुट का उपयोग करना चाहते हैं ताकि शेल में कमांड या स्क्रिप्ट के साथ आगे के काम में उपयोग किया जा सके।
#!/bin/sh
cat <<EOF | matlab -nodesktop -nosplash -nodisplay
A=matlab_test('$1','$2');
setenv('temp1',A); %doesn't work
[a b] = system(['echo ' '$' 'temp1'])
exit
EOF
देते उत्पादन:: एक संभावित समाधान, निम्नलिखित होगा [XXXXXX @ गणना-0-138 ~] $ ./stack_ex_3 परीक्षण matlab चेतावनी: कोई खिड़की प्रणाली मिल गया। जावा विकल्प 'एमडब्ल्यूटी' पर ध्यान नहीं दिया
< M A T L A B (R) >
Copyright 1984-2010 The MathWorks, Inc.
Version 7.12.0.635 (R2011a) 64-bit (glnxa64)
March 18, 2011
To get started, type one of these: helpwin, helpdesk, or demo.
For product information, visit www.mathworks.com.
>> param1 : test
param2 : matlab
>> >>
a =
0
b =
hello matlab
यह दिखाता है कि आदेश echo $temp1
setenv
और temp1 द्वारा बनाई subshell में मूल्यांकन किया गया था यह करने के लिए आवंटित मूल्य रखती है। खोल के लिए इस कॉल का नतीजा अब बी में संग्रहीत है (एक धारण 0 सफलता का संकेत देता है)। यह कल्पना की जा सकती है कि आप सिस्टम कमांड के माध्यम से खोल में जो कुछ करना चाहते हैं उसे पारित कर सकते हैं, ताकि यह सबहेल में चलता है। यद्यपि इस दृष्टिकोण का पूर्ण मूल्यांकन देने के लिए हमें आपकी समस्या के बारे में और अधिक जानकारी जाननी होगी।
संपादन और फॉलोअप **********************
मैटलैब और बैश है कि मैं के बारे में सोच सकते हैं लपेटकर के निकटतम बात निम्नलिखित चाल है । आप पाइप निम्नलिखित के साथ myresult.out
को मैटलैब स्क्रिप्ट से उत्पादन कर सकते हैं:
#!/bin/sh
cat <<EOF | matlab -nodesktop -nosplash -nodisplay /> myresult.out
A=matlab_test('$1','$2');
disp(['grepMe ' A])
exit
EOF
आप grepMe
लाइन myresult.out
से grep कर सकते हैं, SED के लिए पाइप, और उत्पादन लाइन की जरूरत का ही हिस्सा चुनें, फिर पाइप कि आपकी बाकी लिपि पर। यह उतना करीब है जितना मुझे लगता है कि आप जो भी करने की कोशिश कर रहे हैं उसे प्राप्त कर सकते हैं।
मैंने आपके संशोधित प्रश्न का उत्तर देने का प्रयास करने के लिए अपना उत्तर संपादित किया। – Sevenless
यदि रिटर्न वैल्यू एक छोटा पूर्णांक है, तो एक आसान समाधान यह है कि ['निकास (कोड)'] (http://au.mathworks.com/help/matlab/) का उपयोग करके इसे मैटलैब प्रक्रिया के निकास कोड के रूप में वापस करना है। ref/exit.html) कमांड। विंडोज़ पर कोशिश करते समय ''-wait'] (http://au.mathworks.com/help/matlab/ref/matlabwindows.html) कमांड लाइन तर्क' matlab' को मत भूलें। –