TL; DR Попытка передать вычисление вида $(($LSB_JOBINDEX-1))
на вызов кластера, но при этом появляется ошибка
$((2-1)): syntax error: operand expected (error token is "$((2-1))")
Как мне правильно выбраться или какая альтернативная командаиспользовать, чтобы это работало?
Подробно:
Для автоматизаций в моем рабочем процессе в настоящее время я пытаюсь написать сценарий, который автоматически выполняет команды bsub
в предопределенныхorder.
Некоторые из этих команд являются заданиями массива, каждая из которых должна работать с файлом.Если обойтись без вызовов кластера, это будет выглядеть примерно так:
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))")
Что я здесь не так делаю?Я пробовал другие способы избежать и процитировать, но это было самое близкое к правильному решению