首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数组发送到pbs脚本

将数组发送到pbs脚本
EN

Stack Overflow用户
提问于 2017-09-13 11:17:04
回答 1查看 201关注 0票数 1

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

代码语言:javascript
复制
group=group_1
normals=$(IFS=,; echo *.txt)

qsub -v VAR1=$group,VAR2=${normals[@]} [...] run_script.pbs

run_script.pbs

代码语言:javascript
复制
#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脚本中传递和访问数组的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-09-13 11:25:54

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

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

代码语言:javascript
复制
shopt -s nullglob
fileList=(*.txt)

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

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

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

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

代码语言:javascript
复制
qsub -v VAR1=$group,VAR2="${var_list}"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46196112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档