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

pass variable script argument to another script then qsub to program

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

我想把一个变量参数'i'从一个脚本传递到另一个脚本$i,然后qsub它到一个程序"$1"。在程序中,我从参数向量(**argv)中读取变量,然后使用该变量将输出文件的名称修改为*0、*1、*2、…、*N。

这样我就可以为程序的每个实例都有一个唯一的输出文件。这个程序是并行的,但是由于计算资源的限制,我需要提交最多四个计算节点的一个作业,否则它将永远不会通过Que。所以,我想剥离64个4节点的工作。

到目前为止,我已经阅读了以下主题:

  • "-c选项"通过bash脚本向/bin/bash传递参数
  • "传递参数"http://linux.about.com/od/bash_脚本编写解决方案/a/how-to-pass-arguments-to-a-bash-script.htm
  • "从参数$0或1开始"在Linux中,如何使用终端命令将文件参数传递给bash脚本?
  • "传递参数"http://how-to.wiki a.com/wiki/how_to_read_command_line_arguments_a_bash_脚本
  • 我问的问题完全相同,但我的情况下,使用bash脚本中的循环变量来传递不同的命令行参数,答案并不适用。

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

这是我的前脚本

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

旁白:什么是qsub

这是我的剧本

1
2
3
4
5
6
7
8
#
#$ -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传递给脚本。我不知道如何从脚本中写入错误文件,甚至不知道这是否是检查变量是否被传递的方法。计算没有用户界面,所以一旦它在队列中,我就必须依赖错误文件输出。

提前感谢您的帮助。


考虑使用PBS作业数组。一个PBS脚本将提交多个作业,并且每个作业将具有不同的环境变量$PBS_array_index值。


如果您希望将标准输出从处方传递到脚本,你可以这样做:

1
./daedalus_linux_1.3_64 1 `[cc]`

如果处方在单独的行上打印for循环(i=0,i=1)每次迭代的输出,则可能会将处方生成的输出通过管道传输到xargs命令。

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

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

或者您可以使用如下的xargs:

1
./daedalus_linux_1.3_64 1 `[cc] | xargs`

希望有帮助。