伪终端互相控制,如何获取返回显示

伪终端互相控制,如何获取返回显示

问题是:我的伪终端是 /dev/pts/0,目标伪终端是 /dev/pts/4,我试图让目标伪终端使用 echo text > / 打印文本dev/pts/4 命令。

所以第一个问题是:在我使用 echo text > /dev/pts/4 命令后,目标主机确实显示了文本,但一个缺点是目标在显示文本后会显示另一行,你必须手动按ctrl+c结束,如何避免上述情况?

其次,我认为使用 man pty > /dev/pts/4 后,目标伪终端确实打开了一个 pty 手册,但缺点是我的伪终端在显示文本后也会产生一个空行,而且无论我尝试用 ctrl + c 结束它,但它不起作用,修复它的唯一方法就是关闭我的伪终端。所以我尝试再次在后台运行 man pty > /dev/pts/4 & ,我的伪终端没有显示空行,但目标伪终端没有显示 man 手册。

那么第二个问题是:如何让目标伪终端正常显示man手册,但我的伪终端不显示空行回车。

最后一个问题是我想拦截目标伪终端的所有显示。

问题和描述比较多,谢谢各位的解答!

答案1

它可能需要额外的输入。发送换行符可能有助于向目标 shell 发出命令已完成的信号:

echo -n text > /dev/pts/4

或者使用-e添加换行符,相同的区别:

echo -e "text\n" > /dev/pts/4

您可以将该-s选项与 一起使用man,如下所示:

man -s pty > /dev/pts/4

应该防止目标伪终端在手册页加载后显示新行。重定向页面的“正确”方法man是使用以下script命令,该命令创建一个新的 shell 会话以进行交互:

script -q -c 'man pty' /dev/pts/4

确保环境变量(例如学期寻呼机)已为目标终端正确设置。

要拦截发送到特定伪终端的所有输出,您可以使用tee.但是,当进程直接写入/dev/pts/4.

{ echo "text" ; other_command ; } | tee /dev/pts/4

echo "text"这会将和的输出发送other_command到当前终端 和/dev/pts/4

想要捕捉的地方任何事物一个进程发送到/dev/pts/4,您需要涉及系统调用跟踪或终端多路复用器,例如screentmux,允许会话共享和日志记录。

哦,还tee可以帮助处理空行:echo text | tee /dev/pts/4

相关内容