问题是:我的伪终端是 /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
,您需要涉及系统调用跟踪或终端多路复用器,例如screen
或tmux
,允许会话共享和日志记录。
哦,还tee
可以帮助处理空行:echo text | tee /dev/pts/4
。