使用来自 BASH 文件名的参数作为集群上 Julia 脚本的参数

问题描述

这是我之前提出的问题的延伸:

Using name of BASH script as input argument

我的目标是编写一个 BASH 脚本,它从文件名中获取参数并将它们用作我正在编写的 Julia 代码的输入,然后将 BASH 脚本提交到远程集群。使用@AndriyMakukha 的解决方案,我能够通过 Torque 编写以下脚本:

#!/bin/bash
 
#PBS -l mem=10gb,nodes=1:ppn=2,walltime=1:00:00
#PBS -N ES_100_20_100
#PBS -j oe
#PBS -o ./log/julia.${PBS_JOBID}.out

module load julia/1.5.1 python/3.8.1
 
PARAM1=$( echo ${0%%.pbs} | awk -F "_" '{print $2}' )  
PARAM2=$( echo ${0%%.pbs} | awk -F "_" '{print $3}' )  
PARAM3=$( echo ${0%%.pbs} | awk -F "_" '{print $4}' )  
PARAM4=$( echo ${0%%.pbs} | awk -F "_" '{print $5}' ) 
PARAM5=$( echo ${0%%.pbs} | awk -F "_" '{print $6}' )  
 
echo "Param 1: $PARAM1"
echo "Param 2: $PARAM2"
echo "Param 3: $PARAM3"
echo "Param 4: $PARAM4"
echo "Param 5: $PARAM5"

cd path/to/code 
julia Example.jl $PARAM1 $PARAM1 $PARAM2 $PARAM3 $PARAM4 $PARAM5 

此脚本(称为“Example_1_2_3_4_5.pbs”)将文件名中的不同参数打印到输出文件,然后使用这些参数作为 ARGS 运行 Julia 代码。当我在本地机器上运行它时,效果很好。当我通过 qsub 将代码提交到集群时,我在输出文件中收到以下错误:

Param 1: priv/jobs/3574314-1.orion.cm.cluster.SC
Param 2:
Param 3:
Param 4:
Param 5:
ERROR: LoadError: ArgumentError: invalid base 10 digit 'p' in "priv/jobs/3574314-1.cluster_name.cm.cluster.SC"

显然,代码没有正确读取参数;即,它返回作业的名称,而不是 BASH 文件本身的名称。这很明显,因为

echo ${0%%.pbs}

返回

/cm/local/apps/torque/var/spool/mom_priv/jobs/3574314-1.orion.cm.cluster.SC

如果我提交到集群,我如何获得 pbs 文件本身的名称,因为 ${0%%.pbs} 不起作用?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...