簡體   English   中英

從bash腳本發送一些參數(例如Ctrl-C,3,some_string)進行編程

[英]Send some arguments (like Ctrl-C, 3, some_string), to program, from bash script

我有一個用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();
}

我用帶有標志“ -std = c ++ 11”的g ++編譯了它。

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]"

如果我啟動程序(臨時)並運行此腳本,則可以看到菜單,但它什么也沒做,只需向我顯示菜單即可。 知道怎么做嗎?

要模擬按ENTER鍵,您必須發送回車符\\ r而不是換行符\\ n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM