通过bsub提交时包含bash脚本参数

时间:2015-07-10 09:33:01

标签: bash shell batch-processing

我有以下shell脚本。

#!/bin/bash --login

#BSUB -q q_ab_mpc_work
#BSUB -J psipred
#BSUB -W 01:00
#BSUB -n 64
#BSUB -o psipred.out
#BSUB -e psipred.err
module load compiler/gnu-4.8.0
module load R/3.0.1
export OMP_NUM_THREADS=4

code=${HOME}/Phd/script_dev/rfpipeline.sh
MYPATH=$HOME/Phd/script_dev/
cd ${MYPATH}
${code} myfile.txt

我可以使用bsub将程序提交到集群:

bsub < myprogram.sh

然而,我将程序中的最后一行更改为:

${code} $1

我使用命令行参数指定文件,如何将其传递给bsub?

我试过了:

bsub < myprogram.sh myfile.text

但是bsub不接受myfile.text作为bash参数。

我也试过

bsub <<< myprogram.sh myfile.text
./myprogram.sh myfile.text | bsub
bsub "sh ./myprogram.sh myfile.text"

我需要做什么?

2 个答案:

答案 0 :(得分:1)

这个答案可以解决您的问题:

https://unix.stackexchange.com/questions/144518/pass-argument-to-script-then-redirect-script-as-input-to-bsub

只需在bsub命令的末尾传递带有参数的脚本。

实施例。 example.sh

#!/bin/bash export input=${1} echo "arg input: ${input}"

bsub命令:

bsub [bsub args] "path/to/example.sh arg1"

答案 1 :(得分:0)

我可以回答我自己的问题吗?

似乎我可以使用sed来动态修改文件。我的原始文件现在是:

#!/bin/bash --login

#BSUB -q q_ab_mpc_work
#BSUB -J psipred
#BSUB -W 01:00
#BSUB -n 64
#BSUB -o psipred.out
#BSUB -e psipred.err
module load compiler/gnu-4.8.0
module load R/3.0.1
export OMP_NUM_THREADS=4

code=${HOME}/Phd/script_dev/rfpipeline.sh
MYPATH=$HOME/Phd/script_dev/
cd ${MYPATH}
${code} myfile

我编写了一个bash脚本sender.sh,用命令行参数修改变量myfile,并将修改后的文件发送到bsub:

#!/bin/bash
sed "s/myfile/$1/g" < myprogram.sh | bsub

小心使用双引号,以便bash不会从字面上读取$。然后,我只需运行./sender.sh jobfile.txt即可!

希望这有助于任何人。