【发布时间】:2013-08-27 20:26:27
【问题描述】:
阅读大量 bash 脚本线程和帮助站点后,我找不到可行的解决方案。
我想将变量参数“i”从一个脚本传递给另一个脚本 $i,然后将其 qsub 传递给一个程序“$1”。在程序中,我从参数向量 (**argv) 中读取变量,然后使用该变量将输出文件的名称修改为 *_0、*_1、*_2、...、*_n。
我的想法是,我可以为每个程序实例创建一个唯一的输出文件。该程序是并行的,但由于计算资源的限制,我需要为最多四个计算节点提交一个作业 - 否则它永远不会通过队列。所以,我想分拆 64 个 4 节点作业。
到目前为止,我已经阅读了以下主题:
- “-C 选项”Passing arguments to /bin/bash via a bash script
- “传递参数” http://linux.about.com/od/Bash_Scripting_Solutions/a/How-To-Pass-Arguments-To-A-Bash-Script.htm
- “以参数 $0 或 #1 开头” How can I pass a file argument to my bash script using a Terminal command in Linux?
- “传递参数” http://how-to.wikia.com/wiki/How_to_read_command_line_arguments_in_a_bash_script
- 我要问的问题完全相同,但答案并不适合我的情况Using a loop variable in a bash script to pass different command-line args
阅读这些后,我对这个概念感到满意,但仍然令人困惑 -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 传递给脚本。我不知道如何从脚本写入错误文件 - 或者如果这就是我想要检查变量是否通过的方式。计算没有用户界面,所以一旦它在队列中,我必须依赖错误文件输出。
提前感谢您的帮助。
【问题讨论】:
-
什么是
qsub?可能有助于诊断此问题的一件事是使用set -x并捕获标准错误输出。 -
您也可以尝试
echo $@确认参数是否通过。 -
@Samveen 将
echo $@在没有接口的情况下工作 - 脚本被提交到批处理队列所以什么都没有?