在阅读了 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 更好。