2017-12-28 11 views
0

からプログラムするために、いくつかの引数(Ctrl-C、3、some_stringなど)を送信します。私はC++で書かれたプログラムを持っています。プログラムが実行されているときbashスクリプト

私は信号INTを "捕まえる"機能を持っているので、プログラムが(端末で)実行されているときに端末Ctrl-Cで入力すると、これはメニューで機能し、ユーザーは1,2 、3 ...そして、私は入力し、いくつかの値を書く(等123 ...)。

すべてうまくいくが、私はbashスクリプトから自動的にやりたい。私は "-std = C++ 11" フラグと++グラムでそれをコンパイル

// Example program 
#include <iostream> 
#include <string> 
#include <signal.h> 
#include <stdio.h> 


using namespace std; 
int val=0; 
void signal_callback_handler(int signum) 
{ 
    printf("Caught signal %d\n",signum); 
    // Cleanup and close up stuff here 
    int ans = -1; 
    /*Print the menu.*/ 
    cout << "Press Your Choice"<<endl 
     <<"MENU:"<<endl 
     <<"1 - Exit."<<endl 
     <<"2 - Resume."<<endl 
     <<"3 - Add new computer."<<endl; 

    cin >> ans; 
    switch (ans) 
    { 
     case 1: 
      exit(signum); 
      break; 
     case 2: 
      cout <<" Resume"<< endl; 
      break; 
     case 3: 
      //creat_new_clinet(); 
      cout<<"Option 3 choose"<<endl; 
        cout<<"Type value to val"<<endl; 
        cout<<"val before - "<<val<<endl; 
        cin>>val; 
        cout<<"val after - "<<val<<endl; 
      break; 
     default: 
      break;     
    } 
} 


int main(int argc,char **argv) 
{  
    // Register signal and signal handler 
    signal(SIGINT, signal_callback_handler); 
    getchar(); 
} 

聞くが、私のコードです。

g++ temp.cpp -std=c++11 -o temp 

私はそれをコンパイルした後、私は、端末

./temp 

からそれを実行するので、私はタイプ - Ctrl-Cを、その後、私はこのメッセージを得た:

^CCaught signal 2 
Press Your Choice 
MENU: 
1 - Exit. 
2 - Resume. 
3 - Add new computer. 

その後、私は3を入力し、結果は次のとおりです。

Option 3 choose 
Type value to val 
val before - 0 

Tたとえば123を入力し、結果は

val after - 123 

と入力して、プログラムを終了します。 bashスクリプトで自動的にやりたいちょうど私のメニューを表示し、私はプログラム(TEMP)を起動して、私はこのスクリプトを実行する場合、私は、メニューを見ることができます

pgrep -f temp | xargs kill -INT 
pid_number=$(pidof temp) 
echo $pid_number 
arg='3\n' 
echo $arg > /proc/$pid_number/fd/0 
#xdotool key 3+Enter 
#/usr/bin/xvkbd -xsendevent -text "\[3]\[Enter]" 

が、それは何もしないdoesen't:私は次のスクリプトでそれを実行しようとしました。 どのようにすればいいですか?

+0

改行\ nを送信する必要がありますか? – Jdamian

+0

私はubuntu 16でそれを実行し、私は標準の端末からそれを実行するtempをコンパイルした後。 – Eliya

+0

同じ標準端末からスクリプトを起動しますか? – Jdamian

答えて

0

は、Enterキーを押してシミュレートするために、あなたはキャリッジリターン\ rとないあなたのプログラム `temp`が実行されている場合は、どのようなターミナル標準入力が接続されている