将数组发送到pbs脚本

时间:2017-09-13 11:17:04

标签: bash pbs

我有一个bash脚本,它用几个变量调用qsub

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脚本中传递和访问数组的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

将文件列表存储在一个数组中。您只是在执行命令替换语法$(..)并将输出存储在变量的上下文中并尝试将其作为数组访问。

获取文件列表(不需要$(..))并将其存储在数组中的正确方法是,

shopt -s nullglob
fileList=(*.txt)

oldIFS="$IFS"
IFS=,
printf -v var_list "%s" "${fileList[*]}"
IFS="$oldIFS"
shopt -u nullglob

nullglob没有返回当前文件夹中的任何文件时,需要*.txt选项来处理这种情况。不包括会在控制台上吐出一些错误。当我们不再需要设置选项时,我们会使用-u取消设置。

使用-v支持的printf选项,您可以将数组输出以逗号分隔格式直接存储到变量var_list

现在,您可以将包含逗号分隔格式的文件列表的$var_list传递给您想要的命令。

qsub -v VAR1=$group,VAR2="${var_list}"