16

我在使用 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 生成的输出文件,但找不到“这是一个测试”这一行。

任何帮助,将不胜感激。

谢谢你。

4

2 回答 2

25

使用 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 的回答的评论,但我没有这样做的声誉。)

于 2017-01-05T02:28:48.567 回答
8

不确定您使用的是哪个批处理调度程序,但在 PBSPro 或 SGE 上然后提交qsub example.sh this is a test应该可以满足您的需求。

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

#!/bin/bash

echo $FOO

然后使用如下命令提交:

qsub -v FOO="This is a test" example.sh
于 2013-10-18T08:36:40.217 回答