Скрипт Bash и аргументы командной строки

Итак, у меня есть файл, который называется «run_correlation_study.pbs» и «correlation_study.pbs». В файле correlation_study.pbs я запускаю скрипт bash, использующий переносимое пакетное программное обеспечение (pbs), и назначаю 3 аргумента командной строки, которые будут использоваться в моей реальной программе. В run_correlation_study.pbs я перебираю аргументы командной строки, которые используются в correlation_study.pbs, чтобы я мог разделить свою программу на несколько заданий для вычислительного кластера. Тем не менее, я получаю ошибки с моим файлом run_correlation_study.pbs, когда я пытаюсь запустить его (я превращаю его в исполняемый файл перед запуском). Я разместил оба файла ниже, run_correlation_study.pbs указан первым, а correlation_study.pbs указан вторым. Я могу предоставить ту часть моей программы, где используются аргументы командной строки, но я не думаю, что проблема заключается в этом. Кроме того, ошибка / текст, который появляется, когда я пытаюсь запустить мою программу, указана последней.

Run_correlation_study.pbs:

    for ((ARC_LENGTH = 0; ARC_LENGTH <= 35; ARC_LENGTH++)); do
qsub -v ARC_LENGTH_ARG=$ARC_LENGTH/10, RANDOM_NUM_ARG=$ARC_LENGTH correlation_study.pbs
done

Correlation_study.pbs:

    #PBS -l walltime=24:00:00
#PBS -l nodes=1:ppn=1
#PBS -N Correlation_study_data
#PBS -j oe
#PBS -m abe

#COMMANDS TO RUN
cd /home/kovacevich.9/correlation_study/corrstudies
./correlation_study.x ${ARC_LENGTH_ARG} ${RANDOM_NUM_ARG}

Ошибка / текст:

   usage: qsub [-a date_time] [-A account_string] [-b secs]
[-c [ none | { enabled | periodic | shutdown |
depth=<int> | dir=<path> | interval=<minutes>}... ]
[-C directive_prefix] [-d path] [-D path]
[-e path] [-h] [-I] [-j oe] [-k {oe}] [-l resource_list] [-m n
{abe}]
[-M user_list] [-N jobname] [-o path] [-p priority] [-P proxy_user]
[-q queue]
[-r y|n] [-S path] [-t number_to_submit] [-T type]  [-u user_list]
[-w] path
[-W additional_attributes] [-v variable_list] [-V ] [-x] [-X] [-z]
[script]

Часть программы:

    if(argc == 3)
{
double test_arc_length = atof(argv[1]);
unsigned long int seed = atoi(argv[2]);

0

Решение

Чтобы выполнить арифметику с плавающей запятой из bash, вам нужно вызвать внешнюю программу. Вы можете сделать одно из:

qsub -v "ARC_LENGTH_ARG=$(bc -l <<<"$ARC_LENGTH/10"),..."qsub -v "ARC_LENGTH_ARG=$(awk -v "a=$ARC_LENGTH" 'BEGIN {print a/10}'),..."

С помощью подстановка команд синтаксис $(cmd ...) внутри строки в двойных кавычках.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]