2017-12-28 2 views
0

Ich habe ein Programm, das in C++ geschrieben, und ich habe Parameter, die ich ändern möchte. wenn das Programm läuft.Senden Sie einige Argumente (wie Ctrl-C, 3, some_string), zu programmieren, von Bash-Skript

Also habe ich eine Funktion, die das Signal INT "fängt", also wenn das Programm läuft (im Terminal), gebe ich Terminal Ctrl-C ein, und das führt mich zum Menü und der Benutzer kann 1,2 eingeben , 3 ... und dann gebe ich Enter ein und schreibe dann einen Wert (etc 123 ...).

Alles funktioniert gut, aber ich möchte es automatisch aus Bash-Skript tun.

Hear ist mein Code:

// 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(); 
} 

ich es mit g ++ kompiliert mit Flag "-std = C++ 11".

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

Nachdem ich es kompiliert ich es laufen vom Terminal

./temp 

So geben Sie i - Strg-C und dann bekam ich diese Meldung:

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

Dann 3 i-Typ und Hier sind die Ergebnisse:

Option 3 choose 
Type value to val 
val before - 0 

T hen i-Typ zum Beispiel - 123, und das Ergebnis ist:

val after - 123 

So drücken i auf Enter und das Programm zu beenden. Ich möchte es automatisch per Bash-Skript tun. Ich versuchte es mit dem nächsten Skript zu tun:

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]" 

Wenn ich das Programm (temp) beginnen und ich dieses Skript i das Menü sehen kann, aber es doesen't nichts tun, zeigen sie mir nur das Menü. Irgendeine Idee, wie man es macht?

+0

Wenn Ihr Programm 'temp' läuft, was Terminal Standardeingang angeschlossen? – Jdamian

+0

Ich führe es in Ubuntu 16 und nachdem ich die Temp kompilieren ich es vom Standard-Terminal laufen. – Eliya

+0

Und starten Sie Ihr Skript von demselben Standardterminal aus? – Jdamian

Antwort

0

Zur Simulation der ENTER-Taste, haben Sie einen Wagenrücklauf \ r senden und kein Newline \ n

Verwandte Themen