2015-07-10 28 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即可運行!

希望這可以幫助任何人。