2009-08-02 6 views
1

Je vais exécuter un programme C depuis un script bash.script bash 'here strings'

Le programme c attend les entrées de l'utilisateur. le nombre total d'entrées est 7. qui sont sur 7 lignes différentes. par exemple

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

ainsi de suite .. je l'ai fait un peu de lecture et découvert que bash ici les chaînes sont utilisées à cette fin. Alors j'ai couru le programme, à l'intérieur d'un script bash avec la commande suivante

./runnable <<< 1 

cela résout le but lorsque l'entrée est nécessaire qu'une seule fois ... quelle est la solution lorsque plusieurs entrées seront nécessaires?

Répondre

3

En général, la réponse pourrait être probablement « ça dépend », mais si le programme est quelque chose comme ceci:

#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); 
} 

Ensuite, vous pouvez l'alimenter entrée en utilisant la syntaxe « document ici »:

$ ./a.out <<_END_ 
> string1 
> string2 
> _END_ 
Enter string1:Enter string2:string1: 'string1 
', string2: 'string2 
' 

Cette syntaxe est devenue quelque chose de plus que shell - c'est aussi une construction pratique en Perl et Ruby.

0

Cela dépend en grande partie de la façon dont votre programme analyse son entrée. De nombreux programmes C peuvent et analyser des entiers séparés par des espaces sans difficulté, donc quelque chose comme:

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

serait la solution la plus simple. Si le programme nécessite un retour chariot après chaque numéro, alors:

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

pourrait faire l'affaire. S'il vous plaît noter les citations autour des chaînes d'entrée des deux exemples - ils font la différence entre "travailler" et "ne fonctionne pas", bien que pour la vie de moi je ne me souviens pas exactement pourquoi il est nécessaire pour le premier.