我在使用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生成的输出文件,但是“这是一个测试”这条线无处可寻。
任何帮助都将不胜感激。
谢谢。
答案 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