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

问题描述 投票:0回答:2

我有以下 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"

我需要做什么?

bash shell batch-processing
2个回答
3
投票

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

看来我可以使用 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
就可以了!

希望这对任何人都有帮助。


2
投票

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

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

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

例如。 示例.sh

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

bsub命令:

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

© www.soinside.com 2019 - 2024. All rights reserved.