2017-07-12 25 views
0

"run_correlation_study.pbs"と "correlation_study.pbs"というファイルがあります。 correlation_study.pbsでは、ポータブルバッチソフトウェア(pbs)を使用するbashスクリプトを実行し、実際のプログラムで使用される3つのコマンドライン引数を割り当てます。 run_correlation_study.pbsでは、私は自分のプログラムをコンピューティングクラスタの複数のジョブに分割できるように、correlation_study.pbsで使用されるコマンドライン引数をループします。しかし、run_correlation_study.pbsファイルを実行しようとするとエラーが発生しています(実行前に実行ファイルに変換します)。私は以下の両方のファイルを投稿しました。run_correlation_study.pbsが最初にリストされ、correlation_study.pbsが2番目にリストされています。コマンドライン引数を使用するプログラムの部分を提供することはできますが、そこに問題が発生しているとは思われません。また、プログラムを実行しようとすると表示されるエラー/テキストが最後に表示されます。Bashスクリプトとコマンドライン引数

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]); 
+1

これはC++と何が関係していますか? – NathanOliver

+1

'-v ARC_LENGTH_ARG = $ ARC_LENGTH/10、RANDOM_NUM_ARG = $ ARC_LENGTH'は、' -v'、 'ARC_LENGTH_ARG = $ ARC_LENGTH/10、'と 'RANDOM_NUM_ARG = $ ARC_LENGTH'の3つの独立した引数です。私の推測では、代わりに '-v ARC_LENGTH_ARG = $ ARC_LENGTH/10、RANDOM_NUM_ARG = $ ARC_LENGTH'を使うべきです(カンマの後に空白がないことに注意してください) –

+0

' $ ARC_LENGTH/10'は単なる文字列であることに気付いていますか?値を10で除算した結果?もしそうでなければ、シェルが浮動小数点演算をしていないことに気付かないかもしれません。 '$((25/10))'は2.5ではなく2です。 – chepner

答えて

0

bashから浮動小数点演算を行うには、外部プログラムを呼び出す必要があります。二重引用符で囲まれた文字列内command substitution構文$(cmd ...)を使用して

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

:次のいずれかを行うことができます。

関連する問題