Login

從 tmux 會話中分離除目前終端之外的所有其他終端

  • March 2, 2017

有沒有辦法從正在執行的tmux會話中分離所有終端,除了我實際使用的終端?

看起來有點奇怪,但這樣做的意思是為最終使用者遠端會話保留一些“持久性”層,同時確保使用者僅在“一個外殼”上使用系統。

正如這裡所解釋的,很容易根據使用者名創建會話:

if [[ "$TMUX" == "" ]] &&
       [[ "$SSH_CONNECTION" != "" ]]; then
   # Attempt to discover a detached session and attach
   # it, else create a new session
   WHOAMI=$(whoami)
   if tmux has-session -t $WHOAMI 2>/dev/null; then
   tmux -2 attach-session -t $WHOAMI
   else
       tmux -2 new-session -s $WHOAMI
   fi
fi

但我還想確保最後一個連接的終端是唯一一個仍然連接到使用者tmux會話的終端。

它有辦法做到這一點嗎?我也接受基於screen(或其他多路復用器)的解決方案;)

如果我正確理解了您的問題,則-d可以選擇attach-session執行您想要的操作:

tmux -2 attach-session -d -t $WHOAMI

這將附加到指定的目標會話並分離所有其他客戶端。

您可以在附加會話後執行類似的操作,使用detach-client’s-a-t選項:使用 命名客戶端-t,並添加-a以分離除命名客戶端之外的所有客戶端。

screen還有一個-d選項可以做同樣的事情。

引用自:https://unix.stackexchange.com/questions/348646