如何在平台LSF的bsub数组作业参数中使用LSB_作业索引?

如何在平台LSF的bsub数组作业参数中使用LSB_作业索引?,lsf,Lsf,我想将LSB_JOBINDEX作为参数传递给脚本,而不是使用环境变量 这使得我的脚本更不依赖LSF,并避免创建使用环境变量的帮助器脚本 但是,我无法在参数中使用LSB_JOBINDEX:它只作为初始命令字符串的一部分工作 例如,在bash shell中,我使用test命令: bsub -J 'myjobname[1-4]' -o bsub%I.log \ 'echo $LSB_JOBINDEX' \ '$LSB_JOBINDEX' \ \$LSB_JOBINDEX \ '$LSB

我想将
LSB_JOBINDEX
作为参数传递给脚本,而不是使用环境变量

这使得我的脚本更不依赖LSF,并避免创建使用环境变量的帮助器脚本

但是,我无法在参数中使用
LSB_JOBINDEX
:它只作为初始命令字符串的一部分工作

例如,在bash shell中,我使用test命令:

bsub -J 'myjobname[1-4]' -o bsub%I.log \
  'echo $LSB_JOBINDEX' \
  '$LSB_JOBINDEX' \
  \$LSB_JOBINDEX \
  '$LSB_JOBINDEX' \
  "\$LSB_JOBINDEX"
say
bsub2.log
的输出为:

2 $LSB_JOBINDEX $LSB_JOBINDEX $LSB_JOBINDEX $LSB_JOBINDEX
因此,在本例中,仅扩展了第一个
$LSB_JOBINDEX
,而没有扩展以下任何一个

但是我不希望像本例中的
'echo$LSB_JOBINDEX'
那样将整个命令作为一个巨大的字符串传递。我更喜欢像在常规bash命令中那样使用单独的参数

我也尝试过使用
%I
,但它只适用于
-o
和相关的
bsub
选项,而不适用于命令本身

相关的:


在LSF 10.1.0中测试。相关文档:

如果参数以
$
开头,bsub将在参数周围添加单引号。例如如果bsub命令行是

bsub command -a $ARG1 -b $ARG2
然后bsub将在第2个和第4个参数的参数中添加引号。命令的存储方式如下

command -a '$ARG1' -b '$ARG2'
防止这种情况的一种方法是将命令放入脚本中。像这样:

$ cat cmd
echo $LSB_JOBINDEX
echo "line 2"
echo $LSB_JOBINDEX
然后像这样运行您的作业:

$ bsub -I < cmd
Job <2669> is submitted to default queue <normal>.
<<Waiting for dispatch ...>>
<<Starting on hostA>>
0
line 2
0
编辑2

制表符文字也可以使用。并不是说它更好

$ bsub -I echo "       \$LSB_JOBINDEX" "       \$LSB_JOBINDEX"
Job <2687> is submitted to default queue <normal>.
<<Waiting for dispatch ...>>
<<Starting on hostA>>
0 0
$bsub-I echo“\$LSB\u作业索引”\$LSB\u作业索引”
作业已提交到默认队列。
0 0

谢谢你的回答,Michael。我想避免问题中提到的助手脚本。控制角色的破解很有趣:-)但我想我现在还是坚持使用助手脚本;-)
$ bsub -I echo "       \$LSB_JOBINDEX" "       \$LSB_JOBINDEX"
Job <2687> is submitted to default queue <normal>.
<<Waiting for dispatch ...>>
<<Starting on hostA>>
0 0