基本上我有一個m
文件,它看起來像如何從Linux命令行調用MATLAB函數?
function Z=myfunc()
% Do some calculations
dlmwrite('result.out',Z,',');
end
我只想沒有進入MATLAB在命令行中執行它。我試了幾個選項(-nodisplay
,-nodesktop
,-nojvm
,-r
等),沒有一次成功。我最終進入MATLAB,必須輸入「quit」才能退出。
解決方案是什麼?
基本上我有一個m
文件,它看起來像如何從Linux命令行調用MATLAB函數?
function Z=myfunc()
% Do some calculations
dlmwrite('result.out',Z,',');
end
我只想沒有進入MATLAB在命令行中執行它。我試了幾個選項(-nodisplay
,-nodesktop
,-nojvm
,-r
等),沒有一次成功。我最終進入MATLAB,必須輸入「quit」才能退出。
解決方案是什麼?
MATLAB可以運行腳本,但不能從命令行功能。這是我做的:
文件matlab_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
叫它輸入:
./matlab_batcher.sh myfunction myinput
用途:
matlab -nosplash -nodesktop -logfile remoteAutocode.log -r matlabCommand
確保matlabCommand
有一個出口作爲其最後線。
nohup matlab -nodisplay -nodesktop -nojvm -nosplash -r script.m > output &
爲什麼'-nojvm'?我可能需要'java'功能。 – gerrit 2013-02-06 09:30:11
你可以調用的函數是這樣的:
MATLAB -r 「yourFunction中(0)」
可以在這些大括號中給出輸入嗎? – 2013-01-25 15:59:55
如果你不希望MATLAB在運行該函數後繼續執行,那麼使用''matlab -r'func(arg1,arg2,..);退出「'''。 – nimrodm 2013-06-27 08:42:14
你可以編譯成myfile
一個獨立的程序和運行來代替。使用Matlab的編譯器mcc
爲(如果有的話),更多信息在該question提供。
這個答案是從我的答案複製到another question。
你可以通過一個命令MATLAB,這樣運行在命令行的任意函數:
matlab -nodisplay -r "funcname arg1 arg2 arg3 argN"
這將執行MATLAB命令funcname('arg1', 'arg2', 'arg3', 'argN')
。因此,所有的參數都會以字符串形式傳遞,而你的函數需要處理這個,但是這又一次適用於任何其他語言的命令行選項。
我已經修改了亞歷克斯·科恩的回答爲我自己的需要,所以在這兒呢。
我的要求是批處理腳本可以處理字符串和整數/雙輸入,並且Matlab應該從調度器腳本被調用的目錄運行。
#!/bin/bash
matlab_exec=matlab
#Remove the first two arguments
i=0
for var in "[email protected]"
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
其中,最後兩個參數將作爲數字和前兩個作爲字符串傳遞。
這裏有一個簡單的解決方案,我發現。
我有一個函數FUNC(VAR),我想從一個shell腳本運行,並傳遞給它的第一個參數的變種。我把它放在我的shell腳本中:
matlab -nodesktop -nosplash -r "func('$1')"
這對我來說就像一種享受。訣竅是你必須對MATLAB使用雙引號和「-r」命令,並使用單引號將bash參數傳遞給MATLAB。
只要確保你的MATLAB腳本的最後一行是「退出」,或者你運行
matlab -nodesktop -nosplash -r "func('$1'); exit"
請注意,至少在我的設置中,在$ 1周圍使用單引號將環境變量作爲字符串傳遞,並且使用$ 1左右的任何引號將其作爲數字傳入。另外,在我的設置中,如果func是一個函數.m文件,則不需要將退出放在雙引號中。 – Grittathh 2013-05-23 22:01:53
從MathWorks公司:我如何在UNIX機器上在批處理模式下運行MATLAB? ](http://www.mathworks.com/support/solutions/en/data/1-15HNG/index.html) – 2010-01-04 18:24:21