скрипт bash 'здесь строки' - PullRequest
1 голос
/ 02 августа 2009

Я собираюсь запустить программу на C внутри скрипта bash.

Программа c ожидает ввода от пользователя. общее количество входов - 7, которые находятся на 7 разных строках. например

Please enter input1: 
1
Please enter input2: 
2
Please enter input3:
3

и так далее .. Я кое-что прочитал и обнаружил, что строки bash здесь используются для этой цели. Итак, я запустил программу изнутри скрипта bash с помощью следующей команды

./runnable <<< 1 

это решает задачу, когда ввод требуется только один раз ... каково решение, когда потребуется несколько вводов?

Ответы [ 3 ]

3 голосов
/ 02 августа 2009

Обычно ответом может быть «это зависит», но если программа выглядит примерно так:

#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
'

Этот синтаксис стал чем-то большим, чем просто оболочка - это также удобная конструкция в Perl и Ruby.

2 голосов
/ 02 августа 2009
0 голосов
/ 02 августа 2009

Многое зависит от того, как именно ваша программа анализирует входные данные. Многие программы на Си могут и будут без труда анализировать целые числа, разделенные пробелом, например что-то вроде:

#!/bin/bash
./runnable <<< "1 2 3"

будет самым простым решением. Если программе требуется возврат каретки после каждого номера, то:

#!/bin/bash
./runnable <<< "1
2
3"

мог бы добиться цели. Обратите внимание на кавычки вокруг входных строк в обоих примерах - они делают различие между «работающим» и «неработающим», хотя я не могу вспомнить, почему это необходимо для первого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...