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

the*_*ine 6 command-line

OS X 有这个。理想情况下,我希望重新启动看起来就像从终端的 POV 中从未发生过一样(让我们忽略远程会话并暂时假设 0 个后台进程)。意思是,我想在每个终端选项卡中查看标准输入、标准输出、标准错误(即回滚)历史记录。

注意:这与 bash 历史无关。这是关于在重新启动之间保留终端会话。

egm*_*ont 2

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

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

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

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

  • /tmp许多发行版在重新启动后都会清除其下的文件。应选择不同的持久位置,或者需要与引导脚本进行一些合作。

  • 这些文件经过加密(从VTE版本 0.40 开始),以克服万一有人访问磁盘时数据泄露的隐私问题。加密密钥仅在gnome-terminal的内存中可用。为了使这些文件持续存在,要么应该跳过加密层(带回旧的隐私问题),要么应该在重新启动期间将密钥至少暂时放置在磁盘上(...呃,直到用户再次登录并gnome-terminal再次启动......听起来并没有好多少)。仅当您不关心隐私或者文件系统保证加密时才可行。

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

我希望我能概述一些VTE阻止您执行所需操作的设计决策。我不知道如何在保持当前设计目标的同时满足您的请求。也许还有另一个终端模拟器可以满足您的需求,但可能会牺牲一些VTE功能;我不知道。


gao*_*the 0

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

\n\n

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

\n\n

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

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

* 屏幕快速启动 *

\n\n

RTFM:gnu.org 屏幕用户手册

\n\n
    \n
  • screen - 运行 screen 来简单地创建一个新会话
  • \n
  • screen -ls - 列出正在运行的屏幕会话
  • \n
  • screen -r 20229.pts-2.bangor - 重新附加到会话
  • \n
\n\n

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

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

在另一个问题上,我完整地放入了屏幕帮助页面、命令行用法和示例 .screenrc 的示例:

\n\n

具有 \xe2\x80\x9crestore session\xe2\x80\x9d 功能(如 Mac 终端)的终端模拟器

\n