作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在不同目录中执行一系列作业。我想将目录作为输入参数传递给作业。到目前为止,我了解到我可以使用环境变量作为向作业发送参数的方式。但问题是,由于作业以并行方式运行,因此该变量的最后一个值将用于所有作业。让我们看看我的代码:
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 中是没有意义的。
最佳答案
您是否尝试过将目录作为 command_args
传递,如 manpage 中所述qsub(1)
?那将是:
for i in "${arr[@]}"
do
qsub myBashFile.sh -- "$i"
done
您应该能够在 myBashFile.sh
中以 $1
的形式访问它。
关于linux - 如何将参数传递给作业并以并行方式保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28895102/
我是一名优秀的程序员,十分优秀!