发送阵列PBS脚本
问题描述:
我有一个bash脚本,与几个变量调用qsub
:发送阵列PBS脚本
group=group_1
normals=$(IFS=,; echo *.txt)
qsub -v VAR1=$group,VAR2=${normals[@]} [...] run_script.pbs
run_script.pbs
#PBS -l nodes=1:ppn=16
#PBS -l walltime=2:00:00
#PBS -l mem=10GB
group=$VAR1
normals=$VAR2
echo ${normals[@]}
在这种情况下,数组normals
包含多个文件名,但是当我尝试在.pbs脚本中访问这些文件时,只打印第一个文件。
在.pbs脚本中传递和访问数组的正确方法是什么?
答
你是不是将文件列表存储在一个数组中。您只是在执行命令替换语法$(..)
并将输出存储在变量的上下文中,并尝试以数组的形式访问它。
获取文件夹(不需要$(..)
)的列表,并将其存储在一个阵列是正确的做法,
shopt -s nullglob
fileList=(*.txt)
oldIFS="$IFS"
IFS=,
printf -v var_list "%s" "${fileList[*]}"
IFS="$oldIFS"
shopt -u nullglob
的nullglob
选择需要被处理的情况下,当*.txt
没” t返回当前文件夹中的任何文件。不包括会在控制台上吐出一些错误。当我们不再需要选项集时,我们用-u
解除它。
随着-v
选项printf
载体,可以存储与逗号阵列输出分离格式直接进入可变var_list
现在可以传递一个包含的文件的列表的$var_list
以逗号分隔的格式的命令你想。
qsub -v VAR1=$group,VAR2="${var_list}"
@Inian - 确切地说 – fugu
回答有帮助吗?如果它解决了您的问题,请不要忘记标记接受的答案 – Inian