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


32

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

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

Answers:


19

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

您可以做的是创建一个适当的组件.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。对我来说,这样做是不值得的,因为如果我可以自定义屏幕的默认窗口,那么重启后我会喜欢一个干净的环境。


感谢您的建议。我找到了一种在bash上共享我的历史的方法(不像zsh那样简单),因此我保留了一条命令流。关于.screenrc,我应该考虑一下。不幸的是,您似乎只能执行某些脚本(“ cd”之类的命令不起作用),但这应该没问题。如果我可以使用脚本初始化shell,则我不介意环境变量。
巴泰勒米(Barthelemy),2010年

cd是shell的内置函数,cd命令在“ shell”之外是没有意义的:-)但是,您可以简单地在shebang之后包含一个包含cd / foo / bar的脚本。然后,您的新外壳将更改为该目录。
echox

是的,我了解这种区别,我只是认为命令以某种方式传递给了shell,然后在shell中执行了。但是我编写初始化脚本没有问题:-)共享的历史是个很棒的主意,我真的很喜欢。
巴泰勒米(Barthelemy),2010年

10

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


2

有一种冻结进程状态的工具称为cryopid。但是,当前它不适用于GNU屏幕,因为它不支持重新创建子流程的层次结构。他们声明他们想在将来实现这一目标,但目前该项目似乎还不太活跃。但是,您可能想跟踪他们的进度。


0

几年前,我在solaris上构建了类似的东西。甚至与屏幕无关;这与会议有关。“如果$ TTY =等等”。echox有正确的想法。

提示:如果您要在多台计算机上执行此操作,请认识到每台计算机都应具有自己的定义(在登录时应执行的操作),而不是每个nfs挂载的/ home或类似的计算机都相同。

HTH,-pbr

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.