2

我正在尝试将作业数组中的作业索引作为参数传递给另一个 bash 脚本。

numSims=3 
numTreatments=6 # uses numTreatments top rows of parameters.csv
maxFail=10
j=1
while [ $j -le $numSims ];
do
    bsub -q someQueue -J "mySim[1-$numTreatments]%2" ./another_script.sh $LSB_JOBINDEX $j $maxFail
    let j=j+1
done

numTreatments这里的最终想法是为 1,...,中的每一个提交numSims作业(模拟)。我想要一次运行两个作业 ( %2)。输出的格式为 XX_indexNumber_simNumber,其中 indexNumber 从 1,... 开始,numTreatmentssimNumber 从 1,..., 开始numSims

理想情况下,作为该脚本的一部分提交的所有内容都将具有相同的作业 ID。这还没有正确设置,因为所有具有相同的作业j都被分配了一个不同的作业 ID。我的直接问题是 another_script.sh 没有被识别$LSB_JOBINDEX为输入 - 它看到$j$maxFail作为第一个也是唯一两个传递的参数。当我用其他变量代替 时$LSB_JOBINDEX,没有问题。我究竟做错了什么?


编辑- 我尝试过的一些事情:"$LSB_JOBINDEX"、、、和${LSB_JOBINDEX}%II=$LSB_JOBINDEX; bsub ... $I $j $maxFail

4

1 回答 1

7

这个链接

上面的定义不仅会启动一个批处理作业,还会启动 100 个批处理作业,其中子作业特定的环境变量 $LSB_JOBINDEX 的值从 1 到 100。然后可以在实际的作业启动命令中使用此变量,以便处理每个子任务。

在您的情况下,这意味着该变量$LSB_JOBINDEX可从 script 内部获得another_script.sh。您不需要将其作为参数传递,只需$LSB_JOBINDEX在脚本中访问即可。

于 2012-06-26T19:45:01.630 回答