からプログラムするために、いくつかの引数(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:私は次のスクリプトでそれを実行しようとしました。 どのようにすればいいですか?
改行\ nを送信する必要がありますか? – Jdamian
私はubuntu 16でそれを実行し、私は標準の端末からそれを実行するtempをコンパイルした後。 – Eliya
同じ標準端末からスクリプトを起動しますか? – Jdamian