如何将参数传递给作业并以并行方式保持不变

时间:2015-03-06 08:45:41

标签: linux bash hpc qsub

我正在尝试在不同的目录中执行一系列作业。我想将目录作为输入参数传递给作业。到目前为止,我明白我可以使用环境变量作为向工作发送参数的方法。但问题是,由于作业以并行方式运行,因此该变量的最后一个值将用于所有作业。让我看看我的代码:

for i in "${arr[@]}"
  do
  export dir=$i 
  qsub myBashFile.sh
done

在我的工作中,我使用变量dir进行一些操作。我希望每个作业都使用自己的输入参数执行。 编辑:这是我的工作

#!/bin/sh
#
#
#PBS -N Brownie
#PBS -o test.output.txt
#PBS -e test.error.txt
#PBS -l walltime=2:00:00
#PBS -m n
#PBS -V dir
cd $dir
./run_mycode.sh

我知道这不正确,但我正在寻找一种替代方法来保持dir的值不变并且独立地为所有作业保持唯一。

我还尝试使用sed命令修改作业文件中的变量,如下所示:

 sed "s/dir/"'$i'"/g" my_job.sh > alljobs/my_jobNew.sh

但是不是把$ i的实际值,dir改为$ i,这在my_job.sh中毫无意义。

2 个答案:

答案 0 :(得分:0)

您是否尝试按manpage command_args中的说明将目录作为qsub(1)传递?那将是:

for i in "${arr[@]}"
  do
  qsub myBashFile.sh -- "$i"
done

您应该可以$1内的myBashFile.sh访问它。

答案 1 :(得分:0)

我会使用$ PBS_O_WORKDIR。将提交脚本更改为:

for i in "${arr[@]}"
  do
  cd /path/to/$i 
  qsub /path/to/myBashFile.sh
done

在你的工作中,你会改变&#cd; cd $ dir'到' cd $ PBS_O_WORKDIR'。