保存完整的 GNU 屏幕会话状态

保存完整的 GNU 屏幕会话状态

是否可以保留 GNU 屏幕窗口(或只是标准 shell)的“状态”,以便我可以在重新启动后重新加载所有内容:

  • 开壳数
  • 每个外壳的名称
  • 每个shell的当前目录
  • 每个外壳的历史
  • 如果可能的话,他们的环境变量

答案1

实际上不可能保存完整的屏幕会话。

您可以做的是创建一个适当的文件.screenrc,它将在重新启动系统后设置一些内容。

以下是对您列出的内容的一些评论:

  • 开壳数
  • 每个外壳的名称
  • 每个shell的当前目录

我在启动时使用类似的东西来.screenrc打开一些特定的 shell:

## set the default shell
shell                   zsh

# screens
screen -t 'zsh'
screen -t 'mutt' mutt
screen -t 'zsh' /home/user/bin/scriptToRun
[..]

您将获得 '' 之间的字符串作为窗口名称,名称后面的命令将在默认 shell 上执行。包含您想要的任何脚本,例如更改特定目录并打开一些日志。

  • 每个外壳的历史

您是否考虑过在您的会话中分享 shell 的历史记录?恕我直言,这使事情变得更加容易。在 ZSH 中,它setopt SHARE_HISTORY在你的中完成了.zshrc

  • 如果可能的话,他们的环境变量

如果你确实需要这个并且不想做出任何权衡,你可以考虑一个 shell 脚本,它读出屏幕的当前状态,保存 shell 的数量、环境变量等,并将这些信息放入启动脚本中由你调用.screenrc。对我来说,这不值得付出努力,因为如果我可以自定义屏幕的默认窗口,我会喜欢重新启动后的干净环境。

答案2

我偶然发现了一个名为屏幕会话。它允许您在某种程度上保存和重新加载 GNU Screen 会话。

答案3

有一个工具可以冻结进程的状态,称为冷冻剂。但是,目前它不适用于 GNU screen,因为它不支持重新创建子进程的层次结构。他们表示希望在未来实现这一目标,但该项目目前似乎不太活跃。尽管如此,您可能想追踪他们的进展。

答案4

几年前我在Solaris 上构建了类似的东西。甚至与屏幕无关;这是与会话相关的。 “如果 $TTY = 随便”。 echox 的想法是正确的。

提示:如果您在多台机器上执行此操作,请认识到每台机器都应该有自己的登录时应执行的操作的定义,而不是根据您安装的 /home 或类似的 nfs 进行相同的定义。

HTH,-pbr

相关内容