最初に接続されていないtmuxセッションに接続する方法、または未接続のセッションがない場合は新しいセッションを作成しますか?

最初に接続されていないtmuxセッションに接続する方法、または未接続のセッションがない場合は新しいセッションを作成しますか?

最初のtmuxセッションに接続する方法追加の顧客なしまたは、未接続のセッションがない場合は、新しいセッションを作成して接続しますか?

(ユースケースは、新しいターミナルウィンドウが開かれたときに私のターミナルエミュレータが実行されるコマンドです。周りに別々のセッションがある場合は、ウィンドウが開かれるたびに新しいセッションを作成したくありません。また、望ましくありません。のセッションに再接続したいのですが、セッションにすでにウィンドウが接続されている場合は、接続されていない既存のセッションをリサイクルし、セッションがない場合は新しいセッションを作成したいと思います。

答え1

シェルスクリプトを使用せずにtmux自体を使用してこれを行うより簡単な方法があるかもしれません。しかし、いくつかのスクリプトを組み合わせて動作させました。

最初のスクリプトは、接続されていない最初のセッションの名前を出力します。これは,tmux-first-unattached-session

#!/usr/bin/env sh
# Print the name of the first tmux session that has no clients attached.
tmux ls -F '#{session_name}|#{?session_attached,attached,not attached}' 2>/dev/null | grep 'not attached$' | tail -n 1 | cut -d '|' -f1

2 番目のスクリプトは、最初に接続されていないセッションまたは新しいセッションに接続されます。

#!/usr/bin/env sh
# Attach to the first tmux session that has no attached clients.
# If there are no unattached sessions, then create a new session.
tmux attach -t `,tmux-first-unattached-session` 2> /dev/null || tmux

答え2

とても簡単なものがあります。

  1. 未接続のセッションがあるかどうかを検出し、接続を試みます。
  2. それ以外の場合は、クリーンセッションを開始してください。
# Start TMUX first; try to reattach a session
if [[ -z $TMUX ]]; then
  ATTACH_OPT=$(tmux ls | grep -vq attached && echo "attach -d")
  exec eval "tmux $ATTACH_OPT"
fi

答え3

この問題を処理するためにスクリプトを作成しましたtmux2

#!/bin/bash
#
# tmux2 - attach to first unattached session or
#         create new session if none are found
#
N=$(tmux ls | grep -v attached | head -1 | cut -d: -f1)

if [[ ! -z $N ]]
then
    ATTACH_OPTS="attach -t $N"
fi

exec tmux -CC $ATTACH_OPTS

私の場合は、Macとのiterm接続に使用します。接続設定は次のとおりです。

ここに画像の説明を入力してください。

ターミナルセッションが切断された後、再接続すると、中断した部分から再開されます。

関連情報