分离当前会话并附加到另一个会话,用一个脚本完成,可以吗?

分离当前会话并附加到另一个会话,用一个脚本完成,可以吗?

在阅读了 GNU screen 模糊的官方文档后(http://www.gnu.org/software/screen/manual/screen.html) 并在此站点上提出了很多问题。我仍然无法弄清楚如何使用 shell 脚本完成这样的任务。这个任务需要花一些时间来描述。

假设我正在使用 PuTTY 远程登录到我的 Linux 服务器。

【步骤 1】 启动2个telnet连接。

从 putty 窗口 1(PTWIN1),telnet 进入 Linux Bash shell,执行screen -RR启动 screen 会话,并获取会话名称21385.pts-4.linux-ic37

从 Putty 窗口 2(PTWIN2),执行与 PTWIN1 中相同的操作,但这次,我获得了会话名称22041.pts-9.linux-ic37

现在,我们有两个屏幕会话同时运行。我们可以检查一下:

$ screen -ls
There are screens on:
    22041.pts-9.linux-ic37  (Attached)
    21385.pts-4.linux-ic37  (Attached)
2 Sockets in /var/run/uscreens/S-chj2.

【第2步】

假设由于某种原因,PTWIN1 的 TCP 连接异常丢失(但服务器不知道),并且会话 21385 上有一项紧急工作待处理,我想快速重新获得对它的控制权。幸运的是,我们知道 21385 会话仍然存在,因此,我想让 PTWIN2 附加到会话 21385。因为我讨厌一直记住深奥的屏幕选项,所以我决定编写一个名为 sttach 的脚本。

我希望

sttach 21385.pts-4.linux-ic37

可以让我附加到会话 21385(对于 PTWIN2)。

现在,假设 sttach 运行良好并且我可以控制 PTWIN2 上的 21385。

【步骤3】

几分钟后。我想回去处理会话 22041。在这里,请允许我让 PTWIN2 保持与会话 21385 的关联。我想要做的是启动另一个 putty 窗口 (PTWIN3),telnet 进入服务器,然后执行

sttach 22041.pts-9.linux-ic37

希望我可以在 PTWIN3 上恢复会话 22041。

您可以看到 sttach 的好处:只要我知道目标会话名称,我就可以调用它来让我的 PuTTY 窗口切换到该会话,无论目标会话是“(附加)”还是“(分离)”,也无论运行上下文是否在屏幕会话内。

现在的问题是:如何编写 (Bash) 脚本 sttach?我的意思是,在 sttach 中使用适当的选项运行 screen 来实现目标。

等待您的答复。谢谢。


我之前关于 GNU screen 的问题:

我的环境:openSUSE Linux 11.3,GNU screen 4.00.03 (FAU) 2006 年 10 月 23 日

答案1

在与 screen 斗争了几天之后,我放弃了。我找到了更好的替代方案,tmux。

tmux 功能更强大,并且采用更清晰的设计。

例如,要重命名当前会话,只需执行

tmux rename armcross

要重命名外星人会话,只需执行

tmux rename -t oldname newname

——无论它是分离的还是附加的。

要切换到另一个会话,只需执行:

tmux switch-client -t <targetsessionname>

——您不必知道当前会话名称即可执行此操作,无论目标会话处于连接状态还是分离状态。

我只是演示了 tmux 的命令行用法;对于交互式使用,tmux 也比

这本书是一本很好的 tmux 教程tmux:高效的无鼠标开发

==== 对 lain 说一句话:

请不要因为我转向 tmux 而删除我的帖子。这绝对是一个答案。这就像有人问十年前的 Linux 2.2,但有人建议使用 Linux 2.6 可以轻松解决;不像有人说 Windows 可以做得比 Linux 更好。

相关内容