“openvt”的替代品...但对于伪终端(pts)...存在吗?
Openvrt 只能操作 tty...但不能操作 pts。
(示例:特定 pts 中的 lauch 命令以及 shell pts 目标的用户)
Command <dev pts> <launch_command>
答案1
ptyrun 和 ptybandage
有很多现成的工具可以执行相当于以下操作openvt
:打开一个新的伪终端并运行指定的命令,并将其标准 I/O 连接到该伪终端。
- 丹尼尔·J·伯恩斯坦 (Daniel J. Bernstein) 的原创作品
ptyrun
和ptybandage
- 我的
ptyrun
和ptybandage
基于 nosh 工具集实用程序构建的 zpty
Z shell 中的扩展模块
%蒂;绷带 tty /dev/pts/5 /dev/pts/6 %
当然,不同之处在于,在伪终端的情况下,必须有一些进程附加到伪终端的主端才能真正进行操作。做与 I/O 相关的东西。就伯恩斯坦的工具而言,这就是程序ptyio
。 ptyrun
和ptybandage
实际上是转变成ptyget
、ptyio
和ptyspawn
程序的脚本。我的工具的情况类似,其中pty-run
程序是内部 I/O 主力,与pty-get-tty
和相结合open-controlling-tty
。
也就是说,如果想要更细粒度的操作,只需打开伪终端master端,然后链式加载即可某物要完成其余的工作,可以直接调用pty-get-tty
或ptyget
。
终端多路复用器
对于终端多路复用器tmux
和screen
,当然有一些机制(这些程序的一部分)用于启动新的(内部)终端并运行附加到它的命令。有关详细信息,请参阅这些程序的 doco。
现有的伪终端
这些工具(ptyrun
、、ptybandage
等)的用途不是执行的操作是运行将它们附加到的命令现存的伪终端。他们总是创造新鲜的。
很少需要运行附加到现有伪终端的命令。但这是可以完成的。例如,可以使用我的工具集来完成。只需将TTY
环境变量设置为从属端现有伪终端的设备文件名,并通过open-controlling-tty
工具调用命令。
TTY=/dev/pts/5 open-controlling-tty $SHELL
当然,这会在不同的不相关的并发进程之间产生对终端的争用,并且让人痛苦地意识到作业控制 shell 为一个进程做了多少工作。 ☺
另请注意,如果出现以下情况,多个 SSH 服务器和终端仿真器将关闭主端:他们的从机端子进程退出。
这些都不是什么
最后,请注意,这些不是输入填充机制,用于在现有伪终端上驱动现有交互式 shell,向其输入发送命令。他们都附有新的处理到(新的)伪终端。
但事实openvt
也并非如此。
进一步阅读
- https://unix.stackexchange.com/a/249801/5132
- 丹尼尔·伯恩斯坦 (1996)。
ptyrun
。DJBwares。 - 丹尼尔·伯恩斯坦 (1996)。
ptybandage
。DJBwares。 - 丹尼尔·伯恩斯坦 (1996)。
ptyio
。DJBwares。 - 丹尼尔·伯恩斯坦 (1996)。
ptyget
。DJBwares。 - 乔纳森·德博因·波拉德 (2014)。
ptyrun
。小吃指南。软件。 - 乔纳森·德博因·波拉德 (2014)。
ptybandage
。小吃指南。软件。 - 乔纳森·德博因·波拉德 (2014)。
pty-run
。小吃指南。软件。 - 乔纳森·德博因·波拉德 (2014)。
pty-get-tty
。小吃指南。软件。 - 乔纳森·德博因·波拉德 (2014)。
open-controlling-tty
。小吃指南。软件。 - https://unix.stackexchange.com/a/470853/5132