如何从Linux命令行调用MATLAB函数?
基本上我有一个如何从Linux命令行调用MATLAB函数?,linux,command-line,matlab,Linux,Command Line,Matlab,基本上我有一个m文件 function Z=myfunc() % Do some calculations dlmwrite('result.out',Z,','); end 我只想从命令行执行它,而不用进入MATLAB。我尝试了几个选项(-nodisplay,-nodesktop,-nojvm,-r,等等),但都不起作用。我最终进入了MATLAB,必须输入“退出”才能退出 解决方案是什么?可以运行脚本,但不能从命令行运行函数。我就是这么做的: 文件matlab\u batch
m
文件
function Z=myfunc()
% Do some calculations
dlmwrite('result.out',Z,',');
end
我只想从命令行执行它,而不用进入MATLAB。我尝试了几个选项(-nodisplay
,-nodesktop
,-nojvm
,-r
,等等),但都不起作用。我最终进入了MATLAB,必须输入“退出”才能退出
解决方案是什么?可以运行脚本,但不能从命令行运行函数。我就是这么做的:
文件matlab\u batcher.sh
:
#!/bin/sh
matlab_exec=matlab
X="${1}(${2})"
echo ${X} > matlab_command_${2}.m
cat matlab_command_${2}.m
${matlab_exec} -nojvm -nodisplay -nosplash < matlab_command_${2}.m
rm matlab_command_${2}.m
使用:
确保
matlabCommand
的最后一行是exit。您可以调用如下函数:
nohup matlab -nodisplay -nodesktop -nojvm -nosplash -r script.m > output &
matlab -nodisplay -r "funcname arg1 arg2 arg3 argN"
matlab-r“yourFunction(0)”您可以将
myfile
编译成一个独立的程序,然后运行它。使用Matlab的编译器mcc
(如果您有),本文将提供更多信息
此答案是从我的答案复制到的。通过将命令传递到Matlab,可以从命令行运行任意函数,如下所示:
matlab -nodisplay -r "funcname arg1 arg2 arg3 argN"
这将执行Matlab命令
funcname('arg1','arg2','arg3','argN')
。因此,所有参数都将作为字符串传递,您的函数需要处理这个问题,但同样,这也适用于任何其他语言的命令行选项。我已经根据自己的需要修改了Alex Cohen的答案,就是这样
我的要求是batcher脚本可以处理字符串和整数/双输入,Matlab应该从调用batcher脚本的目录运行
#!/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
#/bin/bash
matlab_exec=matlab
#删除前两个参数
i=0
对于“$@”中的变量
做
args[$i]=$var
设i=$i+1
完成
未设置参数[0]
#构造Matlab函数调用
X=“${1}(”
对于${args[*]};do中的arg
#如果变量不是数字,请用引号括起来
如果![“$arg”=~^[0-9]+([.][0-9]+)?$];那么
X=“${X}'”$arg“
其他的
X=“${X}”$arg“
fi
完成
X=“${X%?}”
X=“${X})”
echo MATLAB函数调用为${X}
#调用Matlab
echo“cd(`pwd`);${X}>matlab_command.m
${matlab_exec}-nojvm-nodisplay-nosplash
此脚本可以像这样调用(如果它位于您的路径上):
matlab\u batcher.sh函数名stringArg1 stringArg2 1 2.0
其中,最后两个参数将作为数字传递,前两个作为字符串传递。我找到了一个简单的解决方案 我有一个函数func(var),我想从shell脚本运行该函数,并将变量的第一个参数传递给它。我在shell脚本中放了这个参数:
matlab -nodesktop -nosplash -r "func('$1')"
这对我来说是一种享受。诀窍是,为了将bash参数传递给MATLAB,必须在MATLAB的“-r”命令中使用双引号,并使用单引号
只需确保MATLAB脚本的最后一行是“退出”或运行
matlab -nodesktop -nosplash -r "func('$1'); exit"
我所做的只是:matlab-nojvm-nodisplay-nosplash
matlab-nodisplay“funcname arg1 arg2 arg3 argN”
。唯一的限制是所有参数都是字符串。@gerrit。如果添加括号,参数也可以是数字:matlab-r“myfunc(1,2);exit”
@nimrodm true。我通常希望将其连接到(bash)shell脚本,然后matlab-nodisplay“funcname$@”
将功能限制为前者。从MathWorks:[如何在UNIX机器上以批处理模式运行matlab?]()可以在这些大括号中给出输入吗?使其成为matlab-r“func(arg1,arg2,…);退出“
如果您不想让MATLAB在运行函数后留下来。为什么-nojvm
?我可能需要java
函数。请注意,至少在我的设置中,使用$1左右的单引号将环境变量作为字符串传递,使用$1左右的无引号将其作为数字传递。另外,在我的设置中,如果func是一个function.m文件,则不需要将exit放在双引号中。
matlab -nodesktop -nosplash -r "func('$1'); exit"