Solución:
Para ejecutar un script, puede abrir Matlab (puede evitar ejecutarlo sin la GUI usando -nodisplay
y -nodesktop
banderas), luego ejecute el script usando el run
comando, y finalmente cierre matlab usando exit
.
Puedes hacer todo esto desde un terminal con una sola instrucción:
matlab -nodisplay -nosplash -nodesktop -r "run('path/to/your/script.m');exit;"
Sin embargo, Matlab envía el mensaje de bienvenida a la consola antes de ejecutar su script. Para deshacerse del mensaje de bienvenida simplemente omita las primeras 11 líneas (10 dependiendo de su versión de Matlab) usando tail -n +11
Entonces su instrucción final será:
matlab -nodisplay -nosplash -nodesktop -r "run('path/to/your/script.m');exit;" | tail -n +11
A partir de R2019a, el método preferido sería, para su script test.m:
matlab -batch "test"
Esto tiene varias ventajas, principalmente sin necesidad de todos los -no
banderas y MATLAB saldrá con un estado distinto de cero si prueba.m (debe estar en la ruta de búsqueda) contiene un error.
Desde la página de documentación, matlab (Linux):
Ejecute el script, la instrucción o la función de MATLAB de forma no interactiva. MATLAB:
- Empieza sin el escritorio
- No muestra la pantalla de bienvenida
- Ejecuta declaración
- Deshabilita los cambios en las preferencias
- Deshabilita el almacenamiento en caché de la caja de herramientas
- Registra texto en
stdout
ystderr
- No muestra cuadros de diálogo
- Sale automáticamente con el código de salida 0 si texto se ejecuta con éxito. De lo contrario, MATLAB termina con un código de salida distinto de cero.
declaración es el código MATLAB entre comillas dobles. Si declaración es el nombre de una función o secuencia de comandos de MATLAB, no especifique la extensión del archivo. Cualquier archivo requerido debe estar en la ruta de búsqueda de MATLAB o en la carpeta de inicio.
Utilizar el
-batch
opción en secuencias de comandos no interactivas o flujos de trabajo de línea de comandos. No utilice esta opción con el-r
opción.Para probar si una sesión de MATLAB se está ejecutando en modo por lotes, llame al
batchStartupOptionUsed
función.Ejemplo:
-batch "myscript"
Creé un script de shell básico llamado runm
y poner en mi camino:
$ runm mymatlab.m
Texto:
# simple script to run matlab script
if [ $# -eq 0 ]
then
echo "please pass m script"
fi
matlab -nodisplay -nosplash -nodesktop -r "run('$1');"