Bash 通过命令行参数在脚本中设置PBS/Torque/qsub参数

Bash 通过命令行参数在脚本中设置PBS/Torque/qsub参数,bash,pbs,qsub,torque,Bash,Pbs,Qsub,Torque,我希望能够通过脚本轻松更改提交给qsub的节点数、ppn等。也就是说,我想做这样的事情: qsub script.sh --name=test_job --nodes=2 --ppn=2 --arg1=2 使用如下脚本: #/bin/bash #PBS -N ${NAME} #PBS -l nodes=${NODES}:ppn=${PPN},walltime=${WALLTIME} #PBS -q ${QUEUE} #PBS -m ${MAILOPTS} #PBS -M ${EMAIL} /

我希望能够通过脚本轻松更改提交给
qsub
节点数
ppn
等。也就是说,我想做这样的事情:

qsub script.sh --name=test_job --nodes=2 --ppn=2 --arg1=2
使用如下脚本:

#/bin/bash
#PBS -N ${NAME}
#PBS -l nodes=${NODES}:ppn=${PPN},walltime=${WALLTIME}
#PBS -q ${QUEUE}
#PBS -m ${MAILOPTS}
#PBS -M ${EMAIL}

/some/command ${ARG1}
因此,我希望能够传入参数,这些参数既可以更改PBS环境,也可以将一些参数传递到可执行文件本身

我已尝试使用
qsub
-v
参数:

qsub script.sh -v NAME=test_job,NODES=16,PPN=16,ARG1=2
qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00 -v ARGS1=2
但是提交的作业的名称为
script.sh
和1
节点
,1
ppn

有什么解决方案吗?

在Torque中,当在命令行上指定匹配参数时,所有的#PBS参数都将被覆盖。例如,如果您的脚本具有:

#PBS-l节点=2

您可以提交:

qsub script.sh-l节点=4


命令行将优先于脚本。文档中有许多命令行参数。

@dbeer的回答让我有了更多的见解。我的问题的解决办法如下:

#PBS
参数被命令行覆盖。在这种情况下,args到PBS和脚本本身必须分开。因此,与其尝试做以下事情:

#PBS -l nodes=${NODES}:ppn=${PPN},walltime=${WALLTIME}

/some/command ${ARG1}
在脚本内部,像这样运行

qsub script.sh -v NODES=2,PPN=2,WALLTIME=160:00:00,ARG1=2
这些都可以通过参数设置为
qsub
本身:

qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00
然后,需要传递到可执行文件的任何参数都可以通过
-v
参数传递到
qsub

qsub script.sh -v NAME=test_job,NODES=16,PPN=16,ARG1=2
qsub script.sh -l nodes=2:ppn=2,walltime=160:00:00 -v ARGS1=2