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?
Wenn Ihr Programm 'temp' läuft, was Terminal Standardeingang angeschlossen? – Jdamian
Ich führe es in Ubuntu 16 und nachdem ich die Temp kompilieren ich es vom Standard-Terminal laufen. – Eliya
Und starten Sie Ihr Skript von demselben Standardterminal aus? – Jdamian