我有以下 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"
我需要做什么?
我可以回答我自己的问题吗?
看来我可以使用 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
# escape the slashes if myfile is a path
inputvar=$(echo $1 | sed 's/\//\\\//g')
sed "s/myfile/$inputvar/g" < myprogram.sh | bsub
小心使用双引号,这样 bash 就不会按字面意思读取
$
。然后我只需运行 ./sender.sh jobfile.txt
就可以了!
希望这对任何人都有帮助。
这个答案应该可以解决您的问题:
只需在 bsub 命令末尾传递带有参数的脚本即可。
例如。 示例.sh
#!/bin/bash
export input=${1}
echo "arg input: ${input}"
bsub命令:
bsub [bsub args] "path/to/example.sh arg1"