访问 SGE 作业脚本中设置的变量 header
Accessing variables set in SGE job script header
假设我有一个作业脚本,我在其中请求 4 个内核并在 header 中设置内存限制:
#! /bin/bash
#$ -pe mpi 4
#$ -l h_vmem=128G
echo "echo using 4 cores and 128 memory per core"
是否可以访问这些值,例如 $SGE_PE_MPI
,这样我就可以稍后在脚本中使用核心数,而不必在多个地方进行硬编码?
程序可以从自身读取值。示例代码是:
#! /bin/bash
#$ -pe mpi 4
#$ -l h_vmem=128G
readonly sge_pe_mpi=$(sed -n 's/^#$ -pe mpi \(.*\)//p' -- "[=10=]")
readonly sge_l_h_vmem=$(sed -n 's/^#$ -l h_vmem=\(.*\)//p' -- "[=10=]")
printf 'using %s cores and %s memory per core\n' \
"$sge_pe_mpi" "$sge_l_h_vmem"
示例输出:
using 4 cores and 128G memory per core
请注意,上面的代码只是为了说明这个想法。它非常脆弱。对特殊评论格式的任何更改(例如额外空格)都会破坏它,重复评论也会如此。
假设我有一个作业脚本,我在其中请求 4 个内核并在 header 中设置内存限制:
#! /bin/bash
#$ -pe mpi 4
#$ -l h_vmem=128G
echo "echo using 4 cores and 128 memory per core"
是否可以访问这些值,例如 $SGE_PE_MPI
,这样我就可以稍后在脚本中使用核心数,而不必在多个地方进行硬编码?
程序可以从自身读取值。示例代码是:
#! /bin/bash
#$ -pe mpi 4
#$ -l h_vmem=128G
readonly sge_pe_mpi=$(sed -n 's/^#$ -pe mpi \(.*\)//p' -- "[=10=]")
readonly sge_l_h_vmem=$(sed -n 's/^#$ -l h_vmem=\(.*\)//p' -- "[=10=]")
printf 'using %s cores and %s memory per core\n' \
"$sge_pe_mpi" "$sge_l_h_vmem"
示例输出:
using 4 cores and 128G memory per core
请注意,上面的代码只是为了说明这个想法。它非常脆弱。对特殊评论格式的任何更改(例如额外空格)都会破坏它,重复评论也会如此。