2017-07-12 6 views
0

J'ai donc un fichier appelé "run_correlation_study.pbs" et "correlation_study.pbs". Dans correlation_study.pbs, j'exécute un script bash qui utilise un logiciel de lot portable (pbs) et j'attribue 3 arguments de ligne de commande qui seront utilisés dans mon programme actuel. Dans run_correlation_study.pbs, je parcourt les arguments de la ligne de commande utilisés dans correlation_study.pbs pour que je puisse scinder mon programme en plusieurs tâches pour un cluster de calcul. Cependant, j'ai eu des erreurs avec mon fichier run_correlation_study.pbs lorsque j'ai essayé de l'exécuter (je l'ai transformé en un fichier exécutable avant de l'exécuter). J'ai posté le fichier ci-dessous, run_correlation_study.pbs est listé en premier et correlation_study.pbs est listé en second. Je peux fournir la partie de mon programme où les arguments de la ligne de commande sont utilisés mais je ne pense pas que le problème soit causé là-dedans. En outre, l'erreur/texte qui apparaît lorsque j'essaie d'exécuter mon programme est répertorié en dernier.Script Bash et arguments de ligne de commande

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} 

Erreur/texte:

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] 

portion du programme:

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

Qu'est-ce que cela a à voir avec C++? – NathanOliver

+1

'-v ARC_LENGTH_ARG = $ ARC_LENGTH/10, RANDOM_NUM_ARG = $ ARC_LENGTH' est trois arguments distincts passés au programme:' -v', 'ARC_LENGTH_ARG = $ ARC_LENGTH/10,' et 'RANDOM_NUM_ARG = $ ARC_LENGTH'. Ma conjecture est que vous devriez utiliser '-v ARC_LENGTH_ARG = $ ARC_LENGTH/10, RANDOM_NUM_ARG = $ ARC_LENGTH' à la place (notez le manque d'espace après la virgule) –

+0

Etes-vous conscient que' $ ARC_LENGTH/10' est juste une chaîne, pas le résultat de la division d'une valeur de 10? Sinon, vous n'êtes probablement pas conscient que le shell ne fait pas d'arithmétique en virgule flottante. '$ ((25/10))' est 2, pas 2.5. – chepner

Répondre

0

Pour effectuer une arithmétique en virgule flottante à partir de bash, vous devez appeler un programme externe. Vous pouvez faire l'une des:

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

En utilisant la syntaxe command substitution$(cmd ...) dans un double chaîne entre guillemets.