bash脚本'here strings'

时间:2009-08-02 02:50:33

标签: c bash

我将从bash脚本中运行一个C程序。

c程序需要用户输入。输入总数为7.它们位于7条不同的行上。例如

Please enter input1: 
1
Please enter input2: 
2
Please enter input3:
3
等等...... 我做了一些阅读,发现bash这里的字符串用于此目的。所以我使用以下命令从bash脚本中运行程序

./runnable <<< 1 

这解决了仅需要输入一次的目的...当需要多个输入时,解决方案是什么?

3 个答案:

答案 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"

可以做到这一点。请注意两个示例的输入字符串周围的引号 - 它们区分“工作”和“不工作”,尽管对于我的生活,我不记得为什么它对第一个有必要。