Bash中如何将动态Slurm提交脚本转为静态固定参数脚本
解决方案
完全可以在现有别名内完成静态脚本的生成,仅需在复制通用脚本后新增一步文本替换逻辑即可,无需额外工具。
修改思路
- 保留原有获取
job_ID、复制通用脚本的逻辑 - 复制完成后用
sed命令对新脚本做全局替换,把动态变量替换为实际输入的job_ID值 - 移除提交脚本时的传参步骤,静态脚本无需额外传参
修改后的完整别名代码
alias submitjob='echo "What is the job_ID?"; read job_ID; \ cp /home/Shubham/generic_slurm_script.sh ./submission_script_$job_ID.sh; \ sed -i "s#job_ID=\$1#job_ID=$job_ID#g;s#\${job_ID}#$job_ID#g" ./submission_script_$job_ID.sh; \ echo "Status: Static submission script for $job_ID is created."; \ sbatch submission_script_${job_ID}.sh; \ echo "Status: $job_ID submitted successfully."'
说明
- 第一条
sed规则直接将原脚本中job_ID=$1的动态参数赋值行,替换为固定的job_ID=你的实际输入值 - 第二条
sed规则全局替换脚本中所有${job_ID}变量为实际值,双重保证脚本完全静态 - 提交脚本时移除了末尾的
$job_ID传参,避免冗余 - 如果你所用的HPC系统是BSD系(如FreeBSD、macOS),将
sed -i改为sed -i ''即可兼容
内容的提问来源于stack exchange,提问作者Shubham Gupta
相关产品推荐
相关产品推荐

