run a bash script from matlab
조회 수: 119 (최근 30일)
이전 댓글 표시
Hi
I have been trying to run a bash script from matlab with this code. The bash script use a program from Freesurfer. How can I pass arguments and enviroments argumnets from matlab to a bash script. I have set the enviroment both in bash and within matlab.
I use this code to start the bash script.
subject='bert';
system(sprintf('subj2ascii_v2 %s',subject));
댓글 수: 2
Geoff Hayes
2016년 1월 31일
Carlo Iaboni's answer moved here
Hello I tried everything. Can you see what I'm doing wrong?
contents of GO.m ----------------
cd('/Volumes/SSD/MATLAB/NIH_toolbox/MVPA');
saveDir = eval('pwd');
Afni3dinfoLocation = '/Volumes/Macintosh HD/abin';
cd(Afni3dinfoLocation);
dir 3dinfo
fileName = '/Volumes/SSD/MATLAB/NIH_toolbox/MVPA/COP19/STATS/3COMB_RUNS/ANATICOR/s19.TASK_c01a.GLM_ANATICOR_REML+orig.BRIK';
cmd=sprintf('3dinfo %s',fileName);
eval(sprintf('!3dinfo %s',fileName));
err=system(sprintf('3dinfo %s',fileName));
system('ls 3dinfo');
system(cmd);
display(cmd);
cd(saveDir);
------------------ results in:
>> GO
3dinfo
/bin/bash: 3dinfo: command not found
/bin/bash: 3dinfo: command not found
3dinfo
/bin/bash: 3dinfo: command not found
cmd =
3dinfo /Volumes/SSD/MATLAB/NIH_toolbox/MVPA/COP19/STATS/3COMB_RUNS/ANATICOR/s19.TASK_c01a.GLM_ANATICOR_REML+orig.BRIK
Geoff Hayes
2016년 1월 31일
Carlo - how would you call 3dinfo from a terminal window? Just as
3dinfo ....
or as
./3dinfo ...
You may also want to specify the full path to your executable as
myExe = pathfullfile(pwd, Afni3dinfoLocation, '3dinfo');
and then using that from within your command.
답변 (1개)
Geoff Hayes
2014년 10월 3일
Knut - suppose that you have a bash script written as follows
#!/bin/bash
args=("$@")
echo Number of arguments passed: $#
for var in "$@"
do
echo "$var"
done
All the script does is accept a variable list of arguments and echoes each one to the console (or Command Window when run in MATLAB). Save the above to a file named myBashScript.sh and assign executable privileges to it (easiest way is to just run chmod 777 myBashScript.sh in a terminal or other window, in the directory that contains this file).
In MATLAB do the following
pathToScript = fullfile(pwd,'myBashScript.sh'); % assumes script is in curent directory
subject1 = 'bert';
subject2 = 'ernie';
cmdStr = [pathToScript ' ' subject1 ' ' subject2];
system(cmdStr);
The output from this script, as shown in the MATLAB Command Window, would be
Number of arguments passed: 2
bert
ernie
댓글 수: 1
Walter Roberson
2016년 1월 31일
Better would be
cmdStr = sprintf('''%s'' ''%s'' ''%s''', pathToScript, subject, subject2);
This version quotes the path and the arguments in case they contain spaces or shell metacharacters.
참고 항목
카테고리
Help Center 및 File Exchange에서 Startup and Shutdown에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!