是否可以保留 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