在 SLURM 作业脚本中设置和传递字符串变量
Setting and passing string variable in SLURM job script
我有一个 SLURM 作业脚本如下:
#!/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);"
如您所见,我想设置一个名为 MYSTRING
的字符串变量并将其传递给 MATLAB 函数 matmul_serial
。但是,我收到以下错误:
Unrecognized function or variable 'blablabla'
对于那些整数变量 NROWA
、NROWB
、NCOLA
和 NCOLB
,它们工作得很好。如何在此上下文中正确设置和传递字符串变量 MYSTRING
?
实际上,在赋值过程中,单引号会被 Bash 分割。
❯ MYSTRING='blablabla'
❯ echo $MYSTRING
blablabla
您可以尝试像这样转义引号:
❯ MYSTRING=\'blablabla\'
❯ echo $MYSTRING
'blablabla'
否则,Matlab 会错误地认为 blablabla
是变量或函数的名称,而不是字符串文字。该错误消息具有误导性,因为它在 blablabla
周围添加了一个单引号。但是这些单引号不是您在 MYSTRING=...
作业中插入的引号,如下面的交互式 Matlab 会话所示。
$ matlab
MATLAB is selecting SOFTWARE OPENGL rendering.
< M A T L A B (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'.
我有一个 SLURM 作业脚本如下:
#!/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);"
如您所见,我想设置一个名为 MYSTRING
的字符串变量并将其传递给 MATLAB 函数 matmul_serial
。但是,我收到以下错误:
Unrecognized function or variable 'blablabla'
对于那些整数变量 NROWA
、NROWB
、NCOLA
和 NCOLB
,它们工作得很好。如何在此上下文中正确设置和传递字符串变量 MYSTRING
?
实际上,在赋值过程中,单引号会被 Bash 分割。
❯ MYSTRING='blablabla'
❯ echo $MYSTRING
blablabla
您可以尝试像这样转义引号:
❯ MYSTRING=\'blablabla\'
❯ echo $MYSTRING
'blablabla'
否则,Matlab 会错误地认为 blablabla
是变量或函数的名称,而不是字符串文字。该错误消息具有误导性,因为它在 blablabla
周围添加了一个单引号。但是这些单引号不是您在 MYSTRING=...
作业中插入的引号,如下面的交互式 Matlab 会话所示。
$ matlab
MATLAB is selecting SOFTWARE OPENGL rendering.
< M A T L A B (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'.