将变量脚本参数传递给另一个脚本,然后将qsub传递给程序

时间:2013-08-25 04:17:42

标签: linux shell argv hpc qsub

在阅读了大量的bash脚本线程和帮助网站后,我找不到有效的解决方案。

我想将一个变量参数'i'从脚本传递到另一个脚本$ i,然后将其发送到程序“$ 1”。在程序中,我从参数向量(** argv)中读取变量,然后使用此变量将输出文件的名称修改为* _0,* _1,* _2,...,* _n。

我的想法是,我可以为程序的每个实例提供唯一的输出文件。该程序是并行的,但由于计算资源的限制,我需要为最多四个计算节点提交一个作业 - 或者它永远不会通过该计算节点。所以,我想剥离64个4节点作业。

到目前为止,我已阅读过主题:

阅读完这些内容之后,我对这个概念感到满意,但仍然令人困惑的是如何使用-C和-S命令,或者它们是否被使用;大多数例子都不包括这些。

这是我的衍生预备剧本

#
#$ -cwd
#$ -S /bin/bash
#$ -pe fah 1
for((i=0; i < 2; i++)); do qsub test_S17_script.sh $i; done

旁边信息:what is qsub

这是我的剧本

#
#$ -M duser@acme_u.edu
#$ -m bae
#$ -cwd
#$ -S /bin/bash
#$ -pe fah 1

./daedalus_linux_1.3_64 1 "$1"

因此,衍生工作正常,并生成文件。并且,脚本可以正常传递常量./daedalus_linux_1.3_64 1 1,但传递变量不起作用。我不知道处方是否正确地将变量i传递给脚本。我不知道如何从脚本写入错误文件 - 或者如果这是我想检查变量是否通过的方式。计算没有用户界面,所以一旦它在队列中,我必须依赖于错误文件输出。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您希望将脚本中的标准输出传递给脚本, 你可以这样做:

./daedalus_linux_1.3_64 1 `<prescript>`

如果前言打印出for循环(i = 0,i = 1)的每次迭代输出在不同的行上,你可能会将你的脚本生成的输出传递给xargs命令。

在规定中,您可以更改输出格式,以在一行中显示每次qsub迭代生成的所有输出,如下所示:

for((i=0; i < 2; i++)); do qsub test_S17_script.sh $i; done | xargs

或者您可以按如下方式使用xargs:

./daedalus_linux_1.3_64 1 `<prescript> | xargs`

希望有所帮助。

答案 1 :(得分:0)

考虑使用PBS Job Arrays。单个pbs脚本将提交多个作业,每个作业将具有不同的环境变量$ PBS_ARRAY_INDEX。