Applying Matlab variables in a UNIX command
조회 수: 10 (최근 30일)
이전 댓글 표시
I am building a MATLAB script to generate many input files with unique file names, then to feed these files to a program that can only be run from the command line (UNIX, I'm on a Mac). One of my final barriers is to be able to use MATLAB variables in the UNIX command line. This is a very basic example, but for instance if I execute the following code:
folderName = test;
unix('cd /path; mkdir folderName')
the folder is created with the name "folderName" rather than test, whereas I was hoping for the path /path/test to be created. Any ideas?
Thank you very much!
댓글 수: 0
답변 (2개)
Thorsten
2016년 1월 18일
편집: Thorsten
2016년 1월 18일
You can create the folder in Matlab as follows:
path = '/User/foobar/Matlab/xxx';
folder = 'test';
mkdir(fullfile(path, folder))
댓글 수: 2
Thorsten
2016년 1월 19일
편집: Thorsten
2016년 1월 19일
You have to write the text file filename_var1_var2.txt from Matlab, and then call your program from the command line or from Matlab using system. What's the format of filename_var1_var2.txt? Do you have problems generating this file from Matlab? Have a look at Walter's answer that shows the principle way of how to do it.
Walter Roberson
2016년 1월 18일
folderName = 'test';
unix( sprintf('cd /path; mkdir ''%s''', folderName) )
If you want to live dangerously:
folderName = 'test';
unix( ['cd /path; mkdir ', folderName] )
which would lead you to endless fun if the folderName contained any shell special characters.
댓글 수: 4
Walter Roberson
2016년 1월 21일
편집: Walter Roberson
2016년 1월 21일
Your PATH does not include your current directory. You could add that to the PATH, or you could change your command to
cmd = 'cd /Users/kevin/Desktop/Sims/PulseSims;./simpson simpsonInput';
Something in your program must have reset your PATH, or else you have started MATLAB in an odd way. For me on OS-X, starting by clicking the icon in the dock, I get
/Applications/MATLAB_R2014a.app/sys/java/jre/maci64/jre/bin:/Library/Frameworks/Maple.framework/Versions/2016/bin.APPLE_UNIVERSAL_OSX:/Library/Frameworks/Maple.framework/Versions/2016/jre.APPLE_UNIVERSAL_OSX/bin/:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/MATLAB_R2014a.app/bin:/Applications/MATLAB_R2014a.app/bin/maci:/Applications/MATLAB_R2014a.app/sys/os/maci:/Applications/MATLAB_R2014a.app/bin/maci64:/Applications/MATLAB_R2014a.app/sys/os/maci64
If you are starting MATLAB from the command line on a Linux system then you would be invoking a shell script named "matlab" which should set the PATH and then invoke the MATLAB executable. It is not impossible that someone has mangled that script.
The only other reason I can think of that your PATH might be like that is if someone has changed the actual MATLAB executable to be suid or sguid : in such a case in order to prevent security problems, the operating system would automatically change to a restricted PATH very similar to the one you are seeing, ignoring any environment variables.
참고 항목
카테고리
Help Center 및 File Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!