2017-09-13 94 views
1

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

+0

@Inian - 确切地说 – fugu

+0

回答有帮助吗?如果它解决了您的问题,请不要忘记标记接受的答案 – Inian

回答

3

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

获取文件夹(不需要$(..))的列表,并将其存储在一个阵列是正确的做法,

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}"