run a bash script from matlab
125 views (last 30 days)
Show older comments
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 Comments
Geoff Hayes
on 31 Jan 2016
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
on 31 Jan 2016
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.
Answers (1)
Geoff Hayes
on 3 Oct 2014
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 Comment
Walter Roberson
on 31 Jan 2016
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.
See Also
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!