请求正在运行的bash(交互式)从外部运行命令

时间:2011-09-10 08:28:05

标签: bash shell unix

我打开了一个终端(xterm),其中运行了bash,显示提示符。假设我知道这个正在运行的bash的pid以及与此终端关联的tty。有什么办法,根本不接触这个终端,但只使用tty和pid信息,要求这个正在运行的bash运行一个命令? Naively echo“command”> tty只会在终端显示命令,但bash不会将其作为用户输入接收。

2 个答案:

答案 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只会阻止任何(全双工)回显到屏幕。

注意:从技术上讲,这并非明确地“模拟按键”。