如何将参数从QSub传递到Bash脚本?

时间:2013-09-20 20:12:09

标签: parameter-passing qsub

我在使用QSub将变量传递给Bash脚本时遇到了问题。

假设我有一个名为example的Bash脚本。示例的格式如下:

#!/bin/bash
# (assume other variables have been set)

echo $1 $2 $3 $4

所以,在终端上执行“bash example.sh这是一个测试”(我正在使用Ubuntu 12.04.3 LTS,如果这有帮助)产生输出“这是一个测试”。

然而,当我输入“qsub -v this,is,a,test example.sh”时,我没有输出。我检查了QSub生成的输出文件,但是“这是一个测试”这条线无处可寻。

任何帮助都将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:18)

使用PBSPro或SGE,可以简单地在脚本名称之后放置参数,这看起来很直观。

qsub example.sh hello world

在Torque中,可以使用-F选项提交命令行参数。您的example.sh看起来像这样:

#!/bin/bash echo "$1 $2"

和你的命令如下:

qsub -F "hello world" example.sh

或者,可以使用-v使用逗号分隔的变量列表设置环境变量。

#!/bin/bash echo "$FOO $BAR"

和你的命令如下:

qsub -v FOO="hello",BAR="world" example.sh

(这可能更好地表达为对@William Hay的回答,但我没有这样的声誉。)

答案 1 :(得分:6)

不确定您正在使用哪个批处理调度程序,但在PBSPro或SGE上,然后使用qsub example.sh this is a test提交应该可以执行您想要的操作。

Torque批处理调度程序不允许(AFAIK)以这种方式将命令行参数传递给脚本。您需要创建一个类似于此的脚本。

#!/bin/bash

echo $FOO

然后使用如下命令提交:

qsub -v FOO="This is a test" example.sh