我编写了一个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行。
答案 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);