4824


シェルスクリプトでコマンドライン上で行う入力はできるのですが、実行プログラムに対して入力することができません。

例えば、c言語のscanfなどがあるプログラムを実行するときのscanfへの入力もシェルスクリプト上で行いたいのですが、そのような場合はどうしたら良いのでしょうか

シェルスクリプト上で実行プログラムに入力をする記述法を教えて下さい

* * *

追記  
入力もシェルスクリプト内で自動化したいという意味です。  
現在使用しているプログラムでは多数の入力ファイルをひとつずつ読み込んで、こちらから文字列を入力します。  
しかし、読み込みにかかる時間が長いため、入力ファイルを読み込んだ後の文字列の手入力も自動化すれば、効率が良くなると考えています。

毎回手入力する文字列は同じなのですが、文字列の数が100個近くあるのでしんどいです。  
対話型の入力です。


CC BY-SA 3.0
2015-01-19T04:43:52.407
4820
2019-06-25T21:47:35.690
2015-01-19T06:07:05.457
2155
2155
question
linux
シェルスクリプトで実行中のプログラムに入力する方法


対話型のコマンドをシェルスクリプトで実行したいということですよね？  
`expect`コマンドを使ってください。

例としてログインをシェルスクリプト化します。

[code]

    set timeout 10 #タイムアウトの秒数
    spawn slogin user@host # 実行コマンド
    expect "Password :" # 期待する表示される文字列
    send "password\r" # 入力
    
[/code]

`expect`にはワイルドカード、正規表現が使用できます。


CC BY-SA 3.0
2015-01-19T05:21:01.230
4824
2015-02-26T06:28:14.513
2015-02-26T06:28:14.513
7214
7214
4820
answer


実行プログラムへの入力もスクリプト内で自動化したい、ということでしょうか？

混みいった受け答えがないのであれば、ヒアドキュメントを使うのはどうでしょう？

[code]

    コマンド << END_OF_INPUT
    *入力*
    *入力*
    *入力*
    END_OF_INPUT
    
[/code]

の形で、入力をスクリプト内にわかりやすく記載できます。(`END_OF_INPUT` は対応していればなんでも構いません)

例えば、

[code]

    $ mysql -u root -p << END_OF_INPUT
    use information_schema;
    show TABLES;
    select TABLE_NAME from TABLES;
    END_OF_INPUT
    
[/code]

なんて使い方ができます。


CC BY-SA 3.0
2015-01-19T05:51:54.923
4827
2015-01-19T06:17:38.083
2015-01-19T06:17:38.083
4978
6092
4820
answer