我有一个用c ++编写的程序,我有参数,我想重新改变。当程序运行时。
所以我有“捕获”信号INT的功能,所以当程序运行时(在终端中)我输入终端Ctrl-C,这导致我用菜单运行,用户可以键入1,2, 3 ...然后我输入Enter然后写一些值(等等123 ...)。
一切正常,但我想从bash脚本自动完成。
听到我的代码:
// 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 ++编译了标志“-std = c ++ 11”。
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
然后我键入例如 - 123,结果是:
val after - 123
所以我按Enter键,程序结束。 我想通过bash脚本自动完成。我试着用下一个脚本做到这一点:
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]"
如果我启动程序(临时)并运行此脚本我可以看到菜单,但它什么都不做,只是给我看菜单。 知道怎么做吗?
答案 0 :(得分:0)
要模拟按ENTER键,您必须发送回车符\ r而不是换行符\ n