Bash

使用 tmux 啟動 shell,如果會話未附加,則僅附加到會話

  • October 5, 2018

我目前正在打開我的 shell 時啟動 tmux,我的 shell 的以下配置

[[ $TMUX == "" ]] && tmux new-session

有什麼方法可以啟動我的 shell 並將 tmux 附加到(第一個)未附加的會話(如果存在)?如果 shell 已附加到該會話,我不想附加到該會話。

tmux list-session我認為您可以通過使用適當的格式並解析輸出來實現您正在尋找的東西:

if [ -z "$TMUX" ]; then
   attach_session=$(tmux 2> /dev/null ls -F \
       '#{session_attached} #{?#{==:#{session_last_attached},},1,#{session_last_attached}} #{session_id}' |
       awk '/^0/ { if ($2 > t) { t = $2; s = $3 } }; END { if (s) printf "%s", s }')

   if [ -n "$attach_session" ]; then
       tmux attach -t "$attach_session"
   else
       tmux
   fi
fi

此處的格式tmux ls為每個會話提供連接的客戶端數量、上次連接的時間(如果之前從未連接,則為 1,例如 after tmux new -d)和會話 ID。AWK 腳本使用此資訊來查找目前沒有附加客戶端的最近附加會話並輸出其 ID。然後,我們要麼附加到該會話,要麼在未找到此類會話時創建一個新會話,例如當伺服器未啟動或附加每個現有會話時。

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