我打开一个terminal(xterm),里面运行着bash,显示提示符。 假设我知道这个正在运行的bash的pid和与这个terminal相关的tty。 有没有办法,根本不用触摸这个terminal,而只是使用tty和pid的信息,请求这个非常正在运行的bash来运行命令? 天真的回声“命令”> tty只会在terminal显示命令,但bash不会收到它作为用户input。
使用TIOCSTI
ioctl。 C中的示例:
char* cmd="ls\n"; int fd = open (ptsname, O_RDWR); while (*cmd) { ioctl(fd, TIOCSTI, cmd++); }
(2017)以下是从脚本或命令行实用的:
stty -echo; perl -le 'require "sys/ioctl.ph"; ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV ' `_cmds_` ;stty echo; _app_
如果删除最终的应用程序 , cmds的输出将显示在输入队列中(如在内核中调用的那样),在当前的控制台shell或shell
命令行的应用程序中。 stty
只是停止任何(全双工)回显屏幕。
注意:在技术上,这不是明确的“模拟按键”。