请求运行bash(交互式)以从外部运行命令

6

我有一个终端(xterm)打开并运行了bash,显示一个提示符。假设我知道此运行的bash的pid和与该终端相关联的tty。是否有任何方法,不触摸该终端,仅使用tty和pid信息,询问此正在运行的bash运行命令?天真地echo "command" > tty只会在终端中显示命令,但bash不会将其作为用户输入接收。

3个回答

5
使用 TIOCSTI ioctl。以下是C语言示例:
char* cmd="ls\n";
int fd = open (ptsname, O_RDWR);

while (*cmd)
{
    ioctl(fd, TIOCSTI, cmd++);
}

1

以下内容可以在脚本或命令行中实现(2017年):

stty -echo; perl -le 'require "sys/ioctl.ph"; ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV ' `_cmds_` ;stty echo; _app_

如果您省略最后的app,则cmds的输出将出现在输入队列(在内核中称为此)上,在当前控制台 shell 或启动命令行的应用程序中。 stty只是停止将任何(全双工)回显到屏幕上。 注意: 从技术上讲,这并不明确地“模拟按键”。

0

但它的命令只在同一终端中执行,而不在提供的pts/no其他终端中执行。


目前你的回答不够清晰。请编辑并添加更多细节,以帮助其他人理解它如何回答所提出的问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接