2009-08-02 15 views
1

私はbashスクリプトの中からCプログラムを実行します。bashスクリプト 'here strings'

cプログラムは、ユーザーからの入力を想定しています。 7つの異なる行にある入力の総数は7です。

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

のためのように... 私はいくつかのアップ読み、文字列は、この目的のために使用され、ここでそれはbashを見つけました。だから私は、次のコマンド

./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" 

は、このトリックを行うことができます。両方の例の入力文字列の引用符に注意してください - 彼らは私の人生のために、なぜ最初のものに必要なのかを正確に思い出すことはできませんが、 "働く"と "働かない"