我当前在打开 shell 时启动 tmux,它是我的 shell 的以下配置
[[ $TMUX == "" ]] && tmux new-session
有没有办法启动我的 shell 并将 tmux 附加到(第一个)未附加的会话(如果存在)?如果 shell 已附加到该会话,我不想附加到该会话。
答案1
我认为您可以通过使用适当的格式并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。然后,我们要么附加到该会话,要么在找不到此类会话时创建一个新会话,例如服务器未启动或附加每个现有会话时。