无法读取bash行

时间:2017-02-12 12:44:11

标签: c linux bash

我编写了一个C代码,其中bash脚本行在此C代码中使用,这就是我编写它的方式:

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”,问题是当我将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行。

2 个答案:

答案 0 :(得分:0)

您的代码中有许多观察结果。我假设char *fname_rcut确实指向"/home/number_lines"

首先观察:如果您将命令写入文件,则不会执行它们。因此,只有在运行number_lines后才会创建文件run.sh。因此,在执行C程序期间,该文件将不存在。您可以查看int system(const char *command)man 3 system)。

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

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

答案 1 :(得分:0)

我已经解决了这个问题:
我们实际需要的是在每个shell命令后使用system(命令) 例如:

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

将在解决之后:

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