2015-07-10 24 views
3

我有以下shell脚本。在通过bsub提交时包含bash脚本参数

#!/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" 

什么,我需要做什么?

+0

我想你只需要:'BSUB myprogram.sh myfile.text'。 – meuh

+0

@meuh - 技术上这是运行,但工作失败。如果我很快并使用'bjobs',我可以看到它已经提交,然后看到它已经运行,但是然后立即得到“没有找到未完成的工作”。我期望'mkdir test'的输出结果显示没有新文件夹,称为'test',所以我认为它没有工作。 – brucezepplin

+1

你应该有一个stderr日志文件。尝试在脚本中添加'set -x'来跟踪哪些命令也被执行。 – meuh

回答

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即可运行!

希望这可以帮助任何人。