【问题标题】:Trying to figure out bash scripting with Sun Grid Engine试图用 Sun Grid Engine 找出 bash 脚本
【发布时间】:2016-07-21 18:00:52
【问题描述】:

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

NUMCORES=32

#$ -pe mpi $NUMCORES

(给出错误“由于错误而无法读取脚本文件:数值无效! 字符串“$NUMCORES”的开头部分不包含十进制数字)

但这确实:

#$ -pe mpi 32

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

【问题讨论】:

  • 真的是 bash 脚本吗?第一行是什么? “$NUMCORES 的初始部分不包含十进制数” 是什么意思?后面的部分是否包含小数?您将其显示为恰好包含 32 或者您不是完全真实的?
  • 相同的脚本,还是您缺少export NUMCORES=32

标签: bash sungridengine


【解决方案1】:

bash 脚本中的字符# 向cmets 发出信号。因此,在#$ -pe mpi $NUMCORES 行中,不会使用环境变量NUMCORES 的值,因为它是一个注释。

然而,这些 cmets 对于将参数传递给 qsub 命令很有用。例如,请参阅 the man pagethese 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提交作业!

【讨论】:

  • 谢谢弗朗西斯。我最终采用了类似的方法,使用 python 在生成脚本之前处理指定核心和其他参数。然后脚本会自动提交到队列中。
猜你喜欢
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
相关资源
最近更新 更多