2017-07-12 228 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列在第二位。我可以提供我的程序中使用命令行參數的部分,但我不認爲問題是由此引起的。另外,當我嘗試運行我的程序時顯示的錯誤/文本最後列出。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'。我的猜測是,您應該使用'-v ARC_LENGTH_ARG = $ ARC_LENGTH/10,RANDOM_NUM_ARG = $ ARC_LENGTH'來代替(注意逗號後缺少空格) –

+0

您是否知道'$ ARC_LENGTH/10'只是一個字符串,而不是將值除以10的結果?如果沒有,你也可能不知道shell不做浮點運算。 $((25/10))是2,而不是2.5。 – chepner

回答

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}'),..." 

command substitution語法$(cmd ...)一個雙引號的字符串內。