我打开了一个终端(xterm),其中运行了bash,显示提示符。假设我知道这个正在运行的bash的pid以及与此终端关联的tty。有什么办法,根本不接触这个终端,但只使用tty和pid信息,要求这个正在运行的bash运行一个命令? Naively echo“command”> tty只会在终端显示命令,但bash不会将其作为用户输入接收。
答案 0 :(得分:4)
使用TIOCSTI
ioctl。 C中的示例:
char* cmd="ls\n";
int fd = open (ptsname, O_RDWR);
while (*cmd)
{
ioctl(fd, TIOCSTI, cmd++);
}
答案 1 :(得分:0)
(2017)以下内容在脚本或命令行中是实用的:
stty -echo; perl -le 'require "sys/ioctl.ph"; ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV ' `_cmds_` ;stty echo; _app_
如果删除最终的 app , cmds 的输出将出现在输入队列中(在内核中调用),在当前控制台shell上或在shell
命令行的应用程序中。 stty
只会阻止任何(全双工)回显到屏幕。
注意:从技术上讲,这并非明确地“模拟按键”。