Bash 在LSF作业数组中引用作业索引

Bash 在LSF作业数组中引用作业索引,bash,jobs,hpc,lsf,Bash,Jobs,Hpc,Lsf,我试图将作业数组中作业的索引作为参数传递给另一个bash脚本 numSims=3 numTreatments=6#使用numTreatments最上面的parameters.csv行 maxFail=10 j=1 而[$j-le$numSims]; 做 b sub-q someQueue-J“mySim[1-$numTreatments]%2”。/other_script.sh$LSB_JOBINDEX$J$maxFail 设j=j+1 完成 这里的最终想法是提交1,…,numtreats,n

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

numSims=3
numTreatments=6#使用numTreatments最上面的parameters.csv行
maxFail=10
j=1
而[$j-le$numSims];
做
b sub-q someQueue-J“mySim[1-$numTreatments]%2”。/other_script.sh$LSB_JOBINDEX$J$maxFail
设j=j+1
完成

这里的最终想法是提交1,…,
numtreats
numSims
作业(模拟)。我希望一次运行两个作业(
%2
)。输出的形式为XX_indexNumber_simNumber,其中indexNumber从1开始运行,
numTreatments
,simNumber从1开始运行,
numSims

理想情况下,作为此脚本一部分提交的所有内容都将具有相同的作业ID。这尚未正确设置,因为所有具有相同
j
的作业都被分配了一个不同的作业ID。我的直接问题是另一个\u script.sh没有将
$LSB\u JOBINDEX
识别为输入—它将
$j
$maxFail
视为第一个也是唯一两个传递的参数。
当我将其他变量替换为
$LSB_作业索引
,没有问题。我做错了什么


编辑-我尝试过的一些东西:
“$LSB_JOBINDEX”
${LSB_JOBINDEX}
%I
,以及
I=$LSB_JOBINDEX;B分公司$I$j$maxFail

来自:

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


在您的例子中,这意味着变量
$LSB_JOBINDEX
可以从脚本
另一个脚本.sh
中获得。您不需要将其作为参数传递,只需访问脚本中的
$LSB\u JOBINDEX

我看不到在哪里设置了
$LSB\u JOBINDEX
。因为它是空的,没有引号,所以它好像根本不存在,这与您报告的行为一致。据我所知,
LSB_JOBINDEX
是自动为作业数组定义的,例如,由于某种原因,它不是。无论如何,我建议在它和其他变量周围加上引号。用我尝试过的几个备选方案更新了这个问题。我对
bsub
没有经验,但从您发送的链接来看,
$LSB_JOBINDEX
似乎是通过环境进行通信的,可以从新作业中访问。您是否尝试从
另一个\u script.sh
内部访问
$LSB\u JOBINDEX
,但未将其作为参数传递?再次感谢。在看了半打
$LSB_JOBINDEX
的简单用法之后,我没有给好的描述一个公平的机会。这一课应该渗透到第一个链接的设计者……也可以在命令本身中展开
$LSB_JOBINDEX
,但不幸的是,我在命令参数中没有做到这一点:
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