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" |
因此,剥离工作正常,并生成文件。而且,脚本可以很好地传递常量
提前感谢您的帮助。
考虑使用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` |
希望有帮助。