Я изменил ответ Алекса Коэна для своих нужд, поэтому вот он.
Мои требования заключались в том, чтобы скрипт-дозатор мог обрабатывать строковые и целочисленные / двойные вводы, и чтобы Matlab запускался из каталога, из которого был вызван скрипт-дозатор.
#!/bin/bash
matlab_exec=matlab
#Remove the first two arguments
i=0
for var in "$@"
do
args[$i]=$var
let i=$i+1
done
unset args[0]
#Construct the Matlab function call
X="${1}("
for arg in ${args[*]} ; do
#If the variable is not a number, enclose in quotes
if ! [[ "$arg" =~ ^[0-9]+([.][0-9]+)?$ ]] ; then
X="${X}'"$arg"',"
else
X="${X}"$arg","
fi
done
X="${X%?}"
X="${X})"
echo The MATLAB function call is ${X}
#Call Matlab
echo "cd('`pwd`');${X}" > matlab_command.m
${matlab_exec} -nojvm -nodisplay -nosplash < matlab_command.m
#Remove the matlab function call
rm matlab_command.m
Этот скрипт можно назвать так (если он на вашем пути):
matlab_batcher.sh functionName stringArg1 stringArg2 1 2.0
Где, два последних аргумента будут переданы как числа, а первые два - как строки.