我将从bash脚本中运行一个C程序。
c程序需要用户输入。输入总数为7.它们位于7条不同的行上。例如
Please enter input1:
1
Please enter input2:
2
Please enter input3:
3
等等......
我做了一些阅读,发现bash这里的字符串用于此目的。所以我使用以下命令从bash脚本中运行程序
./runnable <<< 1
这解决了仅需要输入一次的目的...当需要多个输入时,解决方案是什么?
答案 0 :(得分:3)
通常答案可能是“它取决于”,但如果程序是这样的:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char s1[100], s2[100];
printf("Enter string1:");
fflush(stdout);
fgets(s1, sizeof(s1), stdin);
printf("Enter string2:");
fflush(stdout);
fgets(s2, sizeof(s2), stdin);
printf("string1: '%s', string2: '%s'\n", s1, s2);
exit(1);
}
然后您可以使用“此处的文档”语法提供输入:
$ ./a.out <<_END_
> string1
> string2
> _END_
Enter string1:Enter string2:string1: 'string1
', string2: 'string2
'
这种语法不仅仅是shell - 它也是Perl和Ruby中的一个方便的构造。
答案 1 :(得分:2)
答案 2 :(得分:0)
很多都取决于你的程序如何解析它的输入。许多C程序可以并且将会毫无困难地解析以空格分隔的整数,例如:
#!/bin/bash
./runnable <<< "1 2 3"
将是最简单的解决方案。如果程序确实需要在每个数字后回车,那么:
#!/bin/bash
./runnable <<< "1
2
3"
可以做到这一点。请注意两个示例的输入字符串周围的引号 - 它们区分“工作”和“不工作”,尽管对于我的生活,我不记得为什么它对第一个有必要。