[英]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.