Gnu-Screen

分離目前會話並附加到另一個會話,用一個腳本完成,可以嗎?

  • April 9, 2012

在閱讀了 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啟動螢幕會話,並獲取會話名稱21385.pts-4.linux-ic37

在膩子視窗 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。

【第三步】

幾分鐘後。我想回到會話 22041 上工作。在這裡,請允許我讓 PTWIN2 與會話 21385 保持關聯。我想做的是啟動另一個膩子視窗(PTWIN3),telnet 到伺服器,然後執行

sttach 22041.pts-9.linux-ic37

希望我可以在 PTWIN3 上恢復會話 22041。

您可以看到 sttach 的好處:只要我知道目標會話名稱,我就可以呼叫它讓我的 PuTTY 視窗切換到該會話,無論目標會話是“(附加)”還是“(分離)”,並且無論執行上下文是否在螢幕會話內。

現在的問題是:如何編寫(Bash)腳本 sttach?我的意思是,使用適當的選項執行螢幕以實現目標。

等待您的善意答复。謝謝你。


我之前關於 GNU 螢幕的問題:

我的環境:openSUSE Linux 11.3,GNU 螢幕 4.00.03 (FAU) 2006 年 10 月 23 日

在螢幕上掙扎了幾天后,我放棄了。我找到了更好的選擇,tmux。

tmux 更強大,並且採用了非常清晰的設計。

例如,要重命名目前會話,只需執行

tmux rename armcross

要重命名外星人會話,只需執行

tmux rename -t oldname newname

–不管它是分離的還是附加的。

要切換到另一個會話,只需執行:

tmux switch-client -t <targetsessionname>

–你不必知道你目前的會話名稱來做到這一點,無論目標會話是處於附加狀態還是分離狀態。

我只是展示了tmux的命令行用法;對於互動使用,tmux 也比

這本書是一個很好的 tmux 教程tmux: Productive Mouse-Free Development

==== 說謊的一句話:

請不要僅僅因為我轉向 tmux 就刪除我的文章。這絕對是一個答案。就像有些問題是關於十年前的 Linux 2.2 但有人建議使用 Linux 2.6 可以輕鬆解決;不像有人說 Windows 可以比 Linux 做得更好。

引用自:https://serverfault.com/questions/377563