访问 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

请注意,上面的代码只是为了说明这个想法。它非常脆弱。对特殊评论格式的任何更改(例如额外空格)都会破坏它,重复评论也会如此。