问题描述
我帮助维护一个 R 包,该包自动生成 shell 脚本,以便使用 Slurm 在远程服务器上运行 Rscript
。有一个 submit.sh
脚本模板,其中填充了用户在 R 函数中提供的参数。但是,某些系统配置了环境模块,因此在调用 module load R
之前,shell 脚本需要有一行 Rscript
。
是否有一些我可以从 R 中执行的逻辑来检测 module load R
是否必要,以便将行 module load R
包含在 shell 脚本中,条件是它是否必要?
链接到我们的 R 包的源代码:rslurmsubmit.sh
的模板:submit.sh.txt
解决方法
从 shell 脚本中,您可以检查是否定义了 module
shell 函数,然后检查 R
模块是否存在,在这种情况下应该尝试加载该模块:
type module >/dev/null 2>&1
if [ $? -eq 0 ] && module is-avail R; then
module load R
fi
如果 R
模块已加载,则 module load
命令将不执行任何操作。因此即使 R
模块已经加载,使用它也是安全的。