我有以下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"
我需要做什么?
答案 0 :(得分:1)
这个答案可以解决您的问题:
只需在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
即可!
希望这有助于任何人。