Передача массивов в скрипт qsub

Как передать массивы в виде списка переменных через сценарий задания qsub в среде PBS?

Например:

arr1=(1 2 3); arr2(a b c); qsub -v array1=("${arr1[@]}"), array2=("$arr2[@]") job_script.bash

где job_script.bash имеет переменные массива array1 и array2.

Когда я пытаюсь запустить указанную выше команду, чтобы отправить свою работу, я получаю следующую ошибку:

-bash: syntax error near unexpected token `('

Я что-то упустил в своем синтаксисе?

Я просмотрел множество форумов за помощью, но ничего не нашел относительно передачи массивов, как указано выше.

Может ли кто-нибудь помочь мне с вышеуказанной ситуацией?


person Rahil Sethi    schedule 07.11.2014    source источник
comment
Объясните qsub и PBS.   -  person ceving    schedule 08.11.2014
comment
qsub — это команда для отправки задания в кластеры с распределенной вычислительной средой: docs.adaptivecomputing.com/torque/4-1-4/Content/topics/commands/ PBS — это программное обеспечение распределенных вычислений, которое обеспечивает платформу для заданий, которые должны быть отправлены в вычислительные кластеры и выполнены: pbsworks.com/Product.aspx?id=26   -  person Rahil Sethi    schedule 09.11.2014
comment
Вот ссылка на Википедию, чтобы объяснить PBS простым языком: en.wikipedia.org/wiki/Portable_Batch_System   -  person Rahil Sethi    schedule 09.11.2014
comment
Посмотрите внимательно: что не так с array2=("$arr2[@]") -- чего-то не хватает...   -  person David C. Rankin    schedule 10.11.2014


Ответы (2)


Похоже, проблема не в qsub, а в том, что вы неправильно создали переменную arr2 в оболочке...

#  You did this...
arr1=(1 2 3); arr2(a b c); 

#  You meant this...
arr1=(1 2 3); arr2=(a b c); 
person Simon O'Hanlon    schedule 19.04.2015

Я использую qsub ежедневно. может быть, глупый ответ, но может ли проблема быть связана с пробелом, который вы оставляете между двумя переменными массива в аргументе -v?

ваша команда qsub должна быть "qsub -v array1=("${arr1[@]}"),array2=("$arr2[@]") job_script.bash"

person dan spiegelman    schedule 10.11.2014
comment
извините, это тоже не работает. Так что мне тоже нужен ответ на этот вопрос - person dan spiegelman; 10.11.2014
comment
единственное, что я нашел, что работает, - это отправить ваш массив в виде (строковой) переменной в виде списка, разделенного строками, а затем добавить строку в ваш скрипт pbs, который разделяет список на массив, например, если array1 представляет собой список из 3 файлов, создайте переменную с именем array1list="file1:file2:file3". Затем в вашем скрипте pbs добавьте строку типа array1=($(echo $array1list|sed 's/:/ /g')), и вы сможете использовать ее как массив в остальной части вашего кода. - person dan spiegelman; 10.11.2014