从bash脚本发送一些参数(如Ctrl-C,3,some_string)到程序

问题描述 投票:0回答:1

我有一个用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]"

如果我启动程序(临时),我运行这个脚本,我可以看到菜单,但它什么都不做,只是给我看菜单。知道怎么做吗?

c++ linux bash
1个回答
0
投票

要模拟按ENTER键,您必须发送回车符\ r而不是换行符\ n

© www.soinside.com 2019 - 2024. All rights reserved.