2009-08-02 3 views
1

나는 bash 스크립트에서 C 프로그램을 실행하려고한다.bash script 'here strings'

c 프로그램은 사용자로부터의 입력을 예상합니다. 총 입력 수는 7입니다. 이는 7 개의 다른 라인에 있습니다.

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

예를

에 대한 등등 .. 내가 한 몇 가지 독서와 문자열은이 목적을 위해 사용됩니다 여기에 떠들썩한 파티를 발견했다. 그래서 나는 다음과 같은 명령

./runnable <<< 1 

이 입력 한 번만 필요 목적을 해결 ... 다수의 입력이 필요합니다 해결책은 무엇으로 bash는 스크립트 내부에서 프로그램을 실행?

답변

3

은 아마 "이 달려있다"일반적으로 대답 할 수 있지만 프로그램이이 같은 경우 :

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

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

은 그럼 당신은 구문 "여기에 문서의"를 사용하여 그것을 입력을 공급할 수

이 구문은 단순한 쉘 이상으로 변한 것입니다. Perl과 Ruby에서도이 구문을 사용할 수 있습니다.

0

많은 내용은 프로그램이 입력을 구문 분석하는 방법에 따라 달라집니다. 많은 C 프로그램이 어려움없이 공백으로 구분 된 정수를 파싱 할 수 있습니다. 예를 들면

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

이 가장 쉬운 해결책입니다. 프로그램에서 각 번호 뒤에 캐리지 리턴이 필요한 경우 다음을 수행하십시오.

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

트릭을 수행 할 수 있습니다. 두 예제의 입력 문자열 주위의 따옴표를 주목하십시오 - 그들은 "일하는"과 "일하지 않는"사이의 차이를 만듭니다. 그러나 제 인생에서 나는 왜 이것이 첫 번째 이유가 필요한지 정확히 기억할 수 없습니다.