如何解决使用来自 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 举报,一经查实,本站将立刻删除。