如何编写创建多个终端窗格(如tmux)的脚本?

布莱德公园

我想编写一些脚本,这些脚本可以在一个窗口中打开多个终端窗格,就像tmux一样screen

我个人非常了解tmux,并且已经使用了多年,但是我们团队中的其他开发人员不想了解任何有关它或其他屏幕多路复用器的信息。

为此,我想编写可以在一个窗口的多个窗格中进行自我划分的脚本。直线猛击有可能吗?

我的目标是

  • 避免要求node或需要安装某些东西(例如blessed-contrib),以使过程尽可能简单。
  • 使用大多数发行版中预先安装的并且与posix兼容的东西编写它。
  • 一个终端窗口分为多个窗格,每个窗格可以是一个正在运行的进程或命令提示符。
  • 当有人点击时,ctrl+c它会退出所有窗格,并返回到单个终端。
康拉德

我认为可以肯定地说,仅靠bash不能完全做到这一点。您将需要诸如perl / python之类的高级编程语言,或者使用脚本来控制tmux的实例。

这是所涉及技术的快速回顾:

  • 为了在期望的终端环境中运行程序,您需要创建一个伪终端(pty)来承载该程序。
  • pty是使用像ioctl之类的系统调用来创建和控制的,并且具有相当低级的API。
  • 要执行类似tmux的操作,您需要不断读取每个pty的控制端,然后使用特殊的终端转义代码将这些片段拼接到主程序的终端上
  • 终端功能(即终端支持的用于光标定位和粗体/颜色/下划线等的转义序列)具有数百种变化,因此,如果要实现某种兼容性,则需要使用ncurses之类的库来帮助您进行设置子窗口。

有一些工具可以让bash调用ioctl,但我认为它不能处理pty分配所需的所有调用,而且它也不是标准工具。

您也许可以通过手动创建pty设备节点来解决该问题,但是您需要以root身份运行,这很麻烦。

bash可以从tput命令中找出各种终端转义序列,实际上,您可以编写呈现文本窗口的bash脚本,但是如果没有ncurses,这将很难正确地实现并且跨平台,这将花费您大量的时间。

简而言之,我认为您不能使用普通的bash和posix工具来实现这一目标。

Perl几乎安装在所有unix上,并且perl可以进行ioctl调用,因此,是的,即使没有安装任何额外的模块,也应该可以在perl中编写它。但是,我再次期望如果不至少使用一些额外的帮助程序模块(如IO :: PtyCurses),将会花费太长时间但是即使有这些,仍然有很多工作要做。

我认为您最好的选择是尝试编写tmux脚本我以前没有做过,但是那篇文章给出了几天项目的外观,而不是几个星期几吨的学习项目。

如果主要反对是必须安装tmux,则可以尝试下载并编译tmux的静态二进制文件,然后将其与脚本一起分发。静态二进制避免了对系统中任何库的依赖,并且应该在正确架构的任何现代Linux内核上运行。您甚至可以编译多种体系结构的二进制文件,然后让脚本检测要使用的二进制文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章