简体   繁体   English

从bash运行时在c文件中跳过for循环

[英]For loop being skipped in c-file when run from bash

I am running ac file which generates data and writes it to text file. 我正在运行一个ac文件,它将生成数据并将其写入文本文件。 Below is a bash script which runs this file multiple times for different parameters. 下面是一个bash脚本,该脚本针对不同的参数多次运行此文件。 When I run the c code by itself there are no problems. 当我自己运行c代码时,没有问题。 When I run it with the script below no data is saved to the text file (they are still created). 当我使用下面的脚本运行它时,没有数据被保存到文本文件中(它们仍然被创建)。 It seems to be that the for loop, which the printing to the text file lies in, is being skipped (ascertained by placing print statements before and after this for loop). 似乎正在跳过打印到文本文件所在的for循环(通过在此for循环之前和之后放置打印语句来确定)。

#!/bin/bash 

make studentt_sampler

# arguments to pass to ./studentt_sampler
no_samples=5
nu=3.0
mu=1.0
sigma=1.0
data_files=("data_file_0p01.txt" "data_file_0p1.txt" "data_file_1.txt" "data_file_10.txt")
proposal_sigma=(0.01,0.1,1.0,10.0)

# arguments to pass to post_process.py
figure_files=("chain_0p01.pdf" "chain_0p1.pdf" "chain_1.pdf" "chain_10.pdf")


for i in `seq 0 3`;
do
    #echo ${data_files[$i]}
    ./studentt_sampler no_samples nu mu sigma "${data_files[$i]}" "${proposal_sigma[$i]}" &
    # ./post_process.py echo ${data_files[$i]} echo ${figure_files[$i]}

done

wait

The main function of the c file is C文件的主要功能是

int main(int argc, char *argv[]) {
    /* Initialization */
    const gsl_rng_type * T;
    gsl_rng * r;


    /* set iteration variables and the order of the student-t distribution
     * from the command line arguments */
    int i, itr = atoi(argv[1]);

    /* parameters of student t distributions */
    double nu = atof(argv[2]); 
    double mu = atof(argv[3]);
    double sigma = atof(argv[4]);

    /* store the parameters in param_type struct */
    struct param_type params = {nu,mu,sigma};

    /* open text file for writing  and make sure it works*/

    printf("%s\n",argv[5]);
    FILE *f = fopen(argv[5], "w"); 

    if (f == NULL) {
        printf("Error opening file!\n");
        exit(1);
    }

    /* allocate memory for generator and set its seed */
    r = gsl_rng_alloc(gsl_rng_mt19937); 
    gsl_rng_set(r,1); 

    /* Start initial value */
    double x_cur = 1.0; 
    double proposal_sigma = atof(argv[6]);
    double alpha;
    double x_prop;
    int accept; /* keep track of acceptance rate */
    double u; /* to make decision of accept proposal or not */
    double accept_prob;

    /* Start the MCMC */
    for (i=0;i<itr;i++) {
        printf("here!!!\n");
        /* propose a new x */
        x_prop = gsl_ran_gaussian(r,proposal_sigma) + x_cur;

        /* Calculate acceptance probability */
        accept_prob = lklhood(x_prop, &params)/lklhood(x_cur, &params);
        alpha = GSL_MIN(1.0,accept_prob);

        /* Accept or not, decide */
        u = gsl_ran_flat(r,0.0,1.0);
        if (u < alpha) {
            x_cur = x_prop;
            accept = 1;
        }/* print to data file */
        else {
            accept = 0;
        }
        fprintf(f," %.5f %i\n",x_cur,accept);
    } 

    /* Clean up time */
    fclose(f);


    return 0;
}

I appreciate your help. 我感谢您的帮助。

您是否有可能忘记了提供给程序的变量中的$ ,即不应该这样:

./studentt_sampler $no_samples $nu $mu $sigma "${data_files[$i]}" "${proposal_sigma[$i]}" &

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM