有没有办法让终端会话在重启后继续存在?

有没有办法让终端会话在重启后继续存在?

OS X 有这个。理想情况下,我希望从终端的角度来看,重启看起来就像从未发生过一样(让我们忽略远程会话并假设现在没有后台进程)。这意味着,我希望在每个终端选项卡中看到 stdin、stdout、stderr(即回滚)历史记录。

注意:这与 bash 历史记录无关。这与重启之间持久化终端会话有关。

答案1

不,至少在gnome-terminal和其他VTE基于的模拟器中,这不可能以隐式和方便的方式实现。

(当然,您可以在重新启动之前明确浏览所有选项卡,“全选”并将内容复制粘贴到文件中,然后在重新启动后使用某些查看器查看这些文件。如果我理解您的意思,这不是您想要的。此外,颜色和其他格式将会丢失。)

VTE,后面的终端仿真小部件和许多其他终端仿真器默认将gnome-terminal大部分回滚内容(但不是最新的部分)存储在临时文件中。阻止执行您要查找的操作的主要设计决策是:/tmp

  • 这些文件在创建后立即取消链接。这样,即使终端仿真器因某种原因不干净地退出,它们也会被自动删除(并释放磁盘空间)。为了保留它们,应该将它们链接回文件系统树(我不知道这是否可行)或复制到另一个文件中(如果回滚很大,这是一个缓慢的操作,更不用说正确处理可能用尽的磁盘空间)。

  • 该文件位于 下/tmp,许多发行版在重启后会将其删除。应选择其他持久位置,或者需要与启动脚本进行配合。

  • 这些文件已加密(自VTE0.40 版起),以解决在有人访问磁盘时数据泄露的隐私问题。加密密钥仅在gnome-terminal内存中可用。为了使这些文件持久存在,要么应该跳过加密层(重新带来旧的隐私问题),要么应该至少在重启期间将密钥暂时放在磁盘上(...呃,直到该用户再次登录并gnome-terminal重新启动...听起来不太好)。仅当您不关心隐私或文件系统保证加密时才可行。

还有其他较小的问题需要解决,例如刷新包含回滚数据最后一位的文件的不完整块。

我希望我能概述一些设计决策,VTE这些决策阻止了你想要的功能。我看不出如何在保持当前设计目标的同时满足你的要求。也许有另一个终端仿真器可以满足你的要求,大概会牺牲一些VTE功能;我不知道。

答案2

我建议使用这个非常有用的screen工具。它非常值得学习。总结一下我在另一个问题上的回答:

请参阅 .screenrc,您可以使用自定义命令启动默认窗口,以便您可以使用不同的 .screenrc 文件恢复会话(如果您希望恢复不同的会话)。screen -t .... 请参阅gnu.org Screen 手册 - 启动文件

保持终端会话持久性的一个好方法是在服务器上运行“screen”会话。“screen”会话会在该服务器上为您提供多个窗口,您可以在其中登录到其他计算机或任何其他设备。您可以在服务器上运行多个“screen”会话。您可以断开连接并重新连接到所需的会话。“screen”是老式的命令行键盘,但值得学习和试用,以了解其工作原理。它有几个很大的优点:

  • 易于安装,可在任何 unix(或 cygwin)上运行,无需图形(除了终端文本图形)
  • 提供持久的窗口终端会话(只要服务器没有重新启动)

* 屏幕快速启动 *

阅读全文:gnu.org 屏幕用户手册

  • screen-运行screen简单地创建一个新的会话
  • screen -ls – 列出正在运行的屏幕会话
  • screen -r 20229.pts-2.bangor - 重新连接到会话

* 屏幕 ESCAPE 字符默认为 Ctrl-a *除非某个疯狂的循环器在 .screenrc 中更改了它,例如,对于不重视进程后台控制的人来说,可以使用“escape ^Zz”。如果要在屏幕上运行,要真正获得 Ctrl-a 到终端(转到行首),则只需执行 Ctrl-a Ctrl-a。

  • ESCAPE c - 创建新的屏幕窗口
  • ESCAPE 0(或 1 2 3 4 5 6 7 8 9)- 切换到窗口 0(或 1 2 . . )
  • ESCAPE p 或 ESCAPE n - 切换到上一个或下一个窗口
  • ESCAPE "-窗口列表
  • ESCAPE h - 显示屏幕帮助

关于另一个问题,我已在此处完整地介绍了屏幕帮助页面、命令行用法和示例 .screenrc:

具有“恢复会话”功能的终端仿真器,类似 Mac Terminal

相关内容