tmuxを使用してシェルを起動し、未接続セッションにのみ接続する

tmuxを使用してシェルを起動し、未接続セッションにのみ接続する

現在のシェルを開くとtmuxを起動します。私のシェルの設定は次のとおりです。

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

私のシェルを起動し、接続されていない(最初の)セッションがある場合はtmuxを接続する方法はありますか?シェルがすでに接続されている場合は、セッションに接続したくありません。

ベストアンサー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、例:以降tmux new -d)、およびセッションIDを提供します。 AWKスクリプトはこの情報を使用して、現在接続されていないクライアントの最新の接続セッションを見つけ、そのIDを印刷します。次に、そのセッションに接続したり、サーバーが起動しなかったり、既存のすべてのセッションを接続したりするなど、そのセッションが見つからない場合は、新しいセッションを作成します。

おすすめ記事