使用 tmux 启动 shell,并且仅附加到未附加的会话

使用 tmux 启动 shell,并且仅附加到未附加的会话

我当前在打开 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。然后,我们要么附加到该会话,要么在找不到此类会话时创建一个新会话,例如服务器未启动或附加每个现有会话时。

相关内容