将计算命令传递给集群作业

时间:2018-09-06 14:05:01

标签: bash escaping lsf

TL; DR 尝试将$(($LSB_JOBINDEX-1))形式的计算传递给集群调用,但出现错误

$((2-1)): syntax error: operand expected (error token is "$((2-1))")

如何正确转义或使用其他替代命令才能正常工作?

详细信息:

要实现工作流程中的自动化,我目前正在尝试编写一个脚本,该脚本以预定义的顺序自动发出bsub命令。

其中一些命令是数组作业,应该分别在文件上工作。 如果在没有集群调用的情况下完成,它将看起来像这样:

samplearray=(sample0.fasta sample1.fasta) #array of input files
for s in samplearray
    echo $s #some command on $s
done

对于我要使用数组作业的集群调用,此命令如下所示:

bsub -J test[1-2] 'samplearray=(sample0.fastq sample1.fastq)' echo '${samplearray[$(($LSB_JOBINDEX-1))]}'

这将启动两个分别将LSB_JOBINDEX设置为1或2的作业,这就是为什么我需要减去1才能对数组进行正确索引的原因。

现在的问题出在$((...))部分,因为在节点上执行的是${samplearray[$\(\($LSB_JOBINDEX-1\)\)]},它不会触发计算,但会引发错误:

$((2-1)): syntax error: operand expected (error token is "$((2-1))")

我在这里做错了什么?我尝试了其他转义和引用的方法,但这是我最接近正确解决方案的方法

0 个答案:

没有答案