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

时间:2017-12-28 18:22:30

标签: c++ linux bash

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

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

1 个答案:

答案 0 :(得分:0)

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