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