Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用BSB为代码考虑两组输入_Linux_Bash_Shell_Unix_Lsf - Fatal编程技术网

Linux 如何使用BSB为代码考虑两组输入

Linux 如何使用BSB为代码考虑两组输入,linux,bash,shell,unix,lsf,Linux,Bash,Shell,Unix,Lsf,我使用以下shell脚本将作业发送到服务器: #!/bin/bash #BSUB -J randJobName_ul0vm[1-3]%22 #BSUB -oo <pathToLog>/log/randJobName_ul0vm.o.%J.%I #BSUB -q "server.q" #BSUB -n 2 #BSUB -R "span[hosts=1]" JOB_ID=$LSB_JOBID SGE_TASK_ID=$LSB_JOBINDEX JOB_NAME=$LSB_JOB

我使用以下shell脚本将作业发送到服务器:

#!/bin/bash
#BSUB -J randJobName_ul0vm[1-3]%22
#BSUB -oo <pathToLog>/log/randJobName_ul0vm.o.%J.%I    
#BSUB -q "server.q"
#BSUB -n 2
#BSUB -R "span[hosts=1]"

JOB_ID=$LSB_JOBID
SGE_TASK_ID=$LSB_JOBINDEX
JOB_NAME=$LSB_JOBNAME
Id=$((SGE_TASK_ID-1))
declare -a Input
Input[0]="input1 input2"
Input[1]="input3 input4"
Input[2]="input5 input6"

python pythoncode.py parameter1 ${Input[${Id}]}
如何对其进行修改,使其同时提供以下输入

parameter2 input1 input2
parameter2 input3 input4
parameter2 input5 input6
请注意,此处参数1替换为参数2

我使用了以下代码,但它显示索引超出范围。我不明白为什么:

#!/bin/bash
#BSUB -J randJobName_ul0vm[1-6]%22
#BSUB -oo <pathToLog>/log/randJobName_ul0vm.o.%J.%I    
#BSUB -q "server.q"
#BSUB -n 2
#BSUB -R "span[hosts=1]"

JOB_ID=$LSB_JOBID
SGE_TASK_ID=$LSB_JOBINDEX
JOB_NAME=$LSB_JOBNAME
Id=$((SGE_TASK_ID-1))
declare -a Input
Input[0]="input1 input2"
Input[1]="input3 input4"
Input[2]="input5 input6"

python pythoncode.py parameter1 ${Input[${Id}]}
python pythoncode.py parameter2 ${Input[${Id}]}
#/bin/bash
#BSUB-J randJobName_ul0vm[1-6]%22
#b sub-oo/log/randJobName_ul0vm.o.%J.%I
#BSUB-q“server.q”
#BSUB-N2
#BSUB-R“span[hosts=1]”
作业ID=$LSB\U作业ID
SGE_任务_ID=$LSB_作业索引
作业名称=$LSB\U作业名称
Id=$((SGE\U任务\U Id-1))
声明-输入
输入[0]=“输入1输入2”
输入[1]=“输入3输入4”
输入[2]=“输入5输入6”
python pythoncode.py参数1${Input[${Id}]}
python pythoncode.py参数2${Input[${Id}]}
这是您的问题:

#BSUB -J randJobName_ul0vm[1-6]%22
在第一个脚本中,您使用了一个由3个元素组成的数组,因此
Id
的范围为0-2,您已经为其定义了
Input
。在第二个脚本中,您使用的是一个包含6个元素的数组,因此
Id
的范围为0-5,使用
Id=3,4,5
的数组的三个实例将失败,并出现所述错误,因为这些索引上未定义
Input

您需要将上面的行更改回

#BSUB -J randJobName_ul0vm[1-3]%22
在这种情况下,您将有3个数组元素,每个元素都将依次使用
parameter1
parameter2运行
pythoncode.py
。如果希望并行执行这些任务(即一个数组任务执行一次
pythoncode.py
,从而执行一个包含6个子对象的数组),则需要将脚本修改为如下内容:

#!/bin/bash
#BSUB -J randJobName_ul0vm[1-6]%22
#BSUB -oo <pathToLog>/log/randJobName_ul0vm.o.%J.%I    
#BSUB -q "server.q"
#BSUB -n 2
#BSUB -R "span[hosts=1]"

JOB_ID=$LSB_JOBID
SGE_TASK_ID=$LSB_JOBINDEX
JOB_NAME=$LSB_JOBNAME

#### Squirrel changes begin #####

INDEX=$((SGE_TASK_ID-1))     # this ranges over 0,1,2,3,4,5 over the 6 tasks
InputIdx=$(( INDEX / 2 ))    # this ranges over 0,0,1,1,2,2
ParameterIdx=$(( INDEX / 3)) # this ranges over 0,0,0,1,1,1

declare -a Input
Input[0]="input1 input2"
Input[1]="input3 input4"
Input[2]="input5 input6"

declare -a Parameter
Parameter[0]="parameter1"
Parameter[1]="parameter2"

python pythoncode.py ${Parameter[${ParameterIdx}]} ${Input[${InputIdx}]}
#/bin/bash
#BSUB-J randJobName_ul0vm[1-6]%22
#b sub-oo/log/randJobName_ul0vm.o.%J.%I
#BSUB-q“server.q”
#BSUB-N2
#BSUB-R“span[hosts=1]”
作业ID=$LSB\U作业ID
SGE_任务_ID=$LSB_作业索引
作业名称=$LSB\U作业名称
####松鼠的变化开始了#####
索引=$((SGE_任务_ID-1))#这6项任务的范围为0,1,2,3,4,5
InputIdx=$((索引/2))#范围在0,0,1,1,2,2以上
参数dx=$((索引/3))#范围超过0,0,0,1,1,1
声明-输入
输入[0]=“输入1输入2”
输入[1]=“输入3输入4”
输入[2]=“输入5输入6”
declare-a参数
参数[0]=“参数1”
参数[1]=“参数2”
python pythoncode.py${Parameter[${ParameterIdx}]}${Input[${InputIdx}]}

根据这个
randJobName
你为什么不直接使用RANDOM

parameter="parameter$((1+RANDOM%2))"
和输入

input=${Input[$((RANDOM%2))]} 

每次使用时都要打印
${Input[${Id}]}
,以确保索引有效且值符合预期。对于“索引超出范围”,哪一行返回该值?我们应该假设这是最后一个吗?这是错误的。它只使用参数[0]。我们如何解决这个问题?让我澄清一下。它使用参数[0]输入[0]6次。我们如何解决这个问题?
input=${Input[$((RANDOM%2))]}