2017-02-12 81 views
0

我已经写在bash脚本行这个C代码内部使用的C代码生成的文件,这是我写的:无法读取的bash线

printf("wc -l <smallerthan> number_lines\n"); 
if((fr=fopen(fname_rcut,"r"))==NULL) { printf("error in rcut file: %s\n",fname_rcut); exit(1); } 

我需要阅读文件,该文件是从“smallerthan”文件生成“number_lines”,问题是当I信号源C代码自动运行喜欢:

$gcc myC_code.c -lm  
$./a.out > run.sh 
$source run.sh 

然后,如果我查看run.sh

& vi run.sh 

我得到这个里面run.sh

wc -l <smallerthan> number_lines 
    ls 

    error in rcut file: /home/number_lines 

这意味着代码高达这点并没有发现我的“number_lines”文件还因为number_lines文件尚未出现,但如果我复制线运行它分开,而不是“自动”,然后它的工作,因为该文件现在在那里。

我的问题是,如何使我的代码自动运行,我的C代码读取由bash行生成的文件或如何生成文件并正确读取它?

任何想法,请因为我真的是新编程,我必须在C中使用bash工作。

注意:以上只是我的C代码的一小部分,但我在C代码中使用了几条bash行。

回答

0

代码中有许多观察值。我假设char *fname_rcut确实指向"/home/number_lines"。第一次观察:如果您将命令写入文件,它们将不会被执行。因此只有在运行run.sh后才会创建文件number_lines。因此,该文件在C程序执行期间不会存在。您可以查看int system(const char *command)man 3 system)。

第二个观察:/home/number_lines可能不是正确的文件名。它可能是/home/your_name/number_lines;尝试一个pwd来查看确切的目录名称是什么。

第三个观察:你为什么想要source run.sh?源在当前shell中执行该文件。通常没有必要这样做。

+0

目录是正确的我刚刚删除,以减少信息和wriritng,这是真的第二个观察我的文件仍然不avilabe当我运行的代码,所以我还会做什么之前,我应该做的任何命令?对于源代码,我知道运行C代码的命令包含bash行,你建议使用任何方法吗?所以我的问题如何解决这个问题,保持使用这个bash行来生成number_lines文件并自动运行所有代码 –

+0

另一个我做了“源代码”来运行C中包含的所有bash行。代码文件,这不是onley我的代码“它相当大”,但我通常会转换nd soring数据等,但问题出现时,我开始读取仍然没有生成的“number_lines”文件 –

0

我已经解决了它:
其实我们需要在每个shell命令后,使用系统(命令)
例如:

printf("wc -l <smallerthan> number_lines\n");  

将是解决后:

sprintf(command1,"wc -l <smallerthan> number_lines\n"); 
system(command1);