una tipos subfunciones script programacion otra llamar funciones funcion ejemplo dentro como comandos basicas linux command-line matlab

tipos - ¿Cómo llamar a las funciones de MATLAB desde la línea de comandos de Linux?



subfunciones matlab (8)

Aquí hay una solución simple que encontré.

Tengo una función func (var) que quería ejecutar desde un script de shell y pasarle el primer argumento para var. Puse esto en mi script de shell:

matlab -nodesktop -nosplash -r "func(''$1'')"

Eso funcionó como un regalo para mí. El truco es que debe usar comillas dobles con el comando "-r" para MATLAB y usar comillas simples para pasar el argumento bash a MATLAB.

Solo asegúrate de que la última línea de tu script de MATLAB sea "exit" o que ejecutes

matlab -nodesktop -nosplash -r "func(''$1''); exit"

Básicamente tengo un archivo m que se parece a

function Z=myfunc() % Do some calculations dlmwrite(''result.out'',Z,'',''); end

Solo quiero ejecutarlo desde la línea de comandos sin entrar en MATLAB. -nodesktop varias opciones ( -nodisplay , -nodesktop , -nojvm , -r , etc.), ninguna de ellas funcionó. Termino entrando en MATLAB y tengo que escribir "salir" para salir.

¿Cuál es la solución?


He modificado la respuesta de Alex Cohen para mis propias necesidades, así que aquí está.

Mis requisitos eran que el script del dosificador podría manejar cadenas y enteros / entradas dobles, y que Matlab debería ejecutarse desde el directorio desde el que se llamó el script del dosificador.

#!/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

Este script se puede llamar como (si está en su ruta): matlab_batcher.sh functionName stringArg1 stringArg2 1 2.0

Donde, los dos argumentos finales se pasarán como números y los dos primeros como cadenas.


Puede compilar mi myfile en un programa independiente y ejecutarlo en su lugar. Utilice el compilador mcc Matlab para eso (si lo tiene), se proporciona más información en esta question .

Esta respuesta fue copiada de mi respuesta a otra pregunta .


Puede ejecutar una función arbitraria desde la línea de comando pasando un comando a Matlab, así:

matlab -nodisplay -r "funcname arg1 arg2 arg3 argN"

Esto ejecutará el comando Matlab funcname(''arg1'', ''arg2'', ''arg3'', ''argN'') . Ergo, todos los argumentos se pasarán como cadenas y su función necesita manejar esto, pero de nuevo, esto se aplica a las opciones de línea de comandos en cualquier otro idioma también.


Puede llamar a funciones como esta:

matlab -r "yourFunction (0)"


Utilizar:

matlab -nosplash -nodesktop -logfile remoteAutocode.log -r matlabCommand

Asegúrese de que matlabCommand tenga una salida como última línea.


MATLAB puede ejecutar scripts, pero no funciones desde la línea de comandos. Esto es lo que hago:

Archivo 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

Llámalo ingresando:

./matlab_batcher.sh myfunction myinput


nohup matlab -nodisplay -nodesktop -nojvm -nosplash -r script.m > output &