尝试使用 Sun Grid Engine 找出 bash 脚本

Trying to figure out bash scripting with Sun Grid Engine

我正在尝试在 bash 脚本中使用整数变量提交给 Sun Grid Engine(使用 qsub)。 有人可以澄清为什么这不起作用吗?

NUMCORES=32

#$ -pe mpi $NUMCORES

(给出错误“由于错误无法读取脚本文件:数值无效! 字符串“$NUMCORES”的初始部分不包含小数)

但是这样做:

#$ -pe mpi 32

我看过一些涉及 awk 或 bc 但似乎无法使它们工作的解决方案。显然我是 bash 脚本编写的新手 - 感谢您的帮助!

bash 脚本中的字符 # 表示注释。因此,在 #$ -pe mpi $NUMCORES 行中,不会使用环境变量 NUMCORES 的值,因为它是注释。

然而,这些注释对于将参数传递给 qsub 命令很有用。例如,参见 the man page and these examples。注意这些参数可以在命令行传递:

qsub -pe mpi 32 myjob.sh

另一种方法是在 qsub 之前使用命令生成作业。假设作业脚本 jobgeneric.sh 是:

#!/bin/bash
#$ -N useless
#$ -cwd
#$ -pe mpi $NUMCORES
#$ -l h_vmem=6G

echo 42

让我们使用sed command替换环境变量并创建一个新文件job.sh:

export NUMCORES=32
sed 's/$NUMCORES/'$NUMCORES'/g' jobgeneric.sh > job.sh
cat job.sh

另见 Environment variable substitution in sed。结果是:

#!/bin/bash
#$ -N useless
#$ -cwd
#$ -pe mpi 32
#$ -l h_vmem=6G

echo 42

现在可以使用 qsub job.sh!

提交作业