Tengo un script de trabajo SLURM de la siguiente manera:
#!/bin/bash #SBATCH -o ./out/%x.%j.%N.out #SBATCH -e ./out/%x.%j.%N.err #SBATCH -D ./ #SBATCH -J matlab_serial_batch_job #SBATCH --nodes=1 #SBATCH --tasks-per-node=1 #SBATCH --cpus-per-task=1 #SBATCH --time=0:30:00 module load slurm_setup module load matlab/R2021a-generic NROWA=1000 NCOLA=2000 NROWB=2000 NCOLB=5000 MYSTRING='blablabla' # Run MATLAB matlab -nodisplay -singleCompThread \ -r "matmul_serial([$NROWA $NCOLA], [$NROWB $NCOLB], $MYSTRING);" Como puede ver, me gustaría configurar y pasar una variable de cadena llamada MYSTRING a la función matmul_serial de MATLAB. Sin embargo, recibí el siguiente error:
Unrecognized function or variable 'blablabla' Para esas variables enteras NROWA , NROWB , NCOLA y NCOLB , funcionan bastante bien. ¿Cómo configuro y paso correctamente la variable de cadena MYSTRING en este contexto?
En realidad, Bash eliminará las comillas simples durante la tarea.
❯ MYSTRING='blablabla' ❯ echo $MYSTRING blablablaPuedes intentar escapar de las comillas de esta manera:
❯ MYSTRING=\'blablabla\' ❯ echo $MYSTRING 'blablabla' De lo contrario, Matlab cree erróneamente que blablabla es el nombre de una variable o una función y no un literal de cadena. Sin embargo, el mensaje de error es engañoso, ya que agrega una comilla simple alrededor de blablabla . Pero esas comillas simples no son las que insertó en la asignación MYSTRING=... , como se muestra a continuación en una sesión interactiva de Matlab.
$ matlab MATLAB is selecting SOFTWARE OPENGL rendering. < MATLAB (R) > Copyright 1984-2019 The MathWorks, Inc. R2019a (9.6.0.1072779) 64-bit (glnxa64) March 8, 2019 To get started, type doc. For product information, visit www.mathworks.com. >> blablabla Undefined function or variable 'blablabla'.