web-dev-qa-db-ja.com

存在しない場合に新しいtmuxセッションを作成する方法

名前付きtmuxセッションが存在する場合、tmux sessionにアタッチする方法を見つけようとしています。そうでない場合は、指定された名前で新しいセッションを作成します。

現在、私が探しているものを部分的に達成できるいくつかのtmuxコマンドを知っていますが、それらを組み合わせて探しているものを取得する方法は明確ではありません:

  • tmux attachは自動的に既存のセッションにアタッチします-ただし、セッションが存在しない場合はエラーになります
  • tmux newは新しいセッションを作成しますが、毎回作成するため、.tmux.confに残しておくことはできません
  • tmux has-sessionはセッションが存在するかどうかをテストします-しかし、他のコマンドとセッションをつなぎ合わせる方法がわかりません

したがって、セッションにログインする必要があるたびに手動で作成する代わりに、tmuxスクリプトを作成して、これが自動的に行われるようにします。

新しいtmuxセッションを作成する(特定のセッション名が存在しない場合)またはセッション名にアタッチする(存在する場合)ように自動スクリプトを作成するにはどうすればよいですか?

132
rampion

または、追加できます

new-session

あなたの.tmux.conf-サーバーの起動時にデフォルトのセッションを作成します。

その後、tmux attachは、現在のセッションに接続する(つまり、サーバーを実行する)か、新しいセッションを作成します(サーバーを起動し、構成ファイルを読み取り、new-session command)そしてそれにアタッチします。

87
Leonid Shevtsov

私はそれを理解しました( そして私に指摘してもらいました )。

tmux attach || tmux new
155
rampion

Petr Viktorinjkoelker 、および pjincz のコメントで指摘されているように、次のコマンドを使用してmySession存在する場合、および存在しない場合は作成します。

 tmux new -A -s mySession

man tmux から:

new-session[-AdDEP] [-cstart-directory] [-Fformat] [-nwindow-name] [-ssession-name] [-tgroup-name] [-xwidth] [-yheight] [Shell-command]

(別名:new

session-nameという名前で新しいセッションを作成します

[...]

-Aフラグは、new-sessionattach-sessionif session-nameがすでに存在する場合;この場合、-D-dからattach-sessionのように動作します。

new-sessionはtmux-1.8以降の-Aをサポートしています

45
alpha_989

1つのセッションを使用するにはランピオンの答えで十分ですが、このスクリプトでは複数のセッションをセットアップできます。

SESSIONS="work play"

function has-session {
    tmux has-session -t $1 2>/dev/null
}

function except 
{
    if [ "$?" -eq 1 ] ; then
        $1
    fi
}

# Configure your sessions here
function session-work
{
    tmux new-session -d -s work
    tmux neww -k -t work:1
}

function session-play
{
    tmux new-session -d -s play
    tmux neww -k -t play:1
}

#
#MAIN 
for x in $SESSIONS
do
    echo $x
    has-session $x
    except session-$x
done

注意:

-k  --> new-window will not be created if already exists
-d  --> start session or window, but don't attach to it yet
-s  --> name the session
-t  --> specify a target location in the form session:window.pane 
14
Alex Gaudio

起動時にプロジェクトベースの構成を含めるようにAlexの提案を調整し、次の使用を開始しました。

# ~/bin/tmux-myproject Shell script
# The Project name is also used as a session name (usually shorter)
PROJECT_NAME="myproject"
PROJECT_DIR="~/myproject"

tmux has-session -t $PROJECT_NAME 2>/dev/null
if [ "$?" -eq 1 ] ; then
    echo "No Session found.  Creating and configuring."
    pushd $PROJECT_DIR
    tmux new-session -d -s $PROJECT_NAME
    tmux source-file ~/bin/tmux-${PROJECT_NAME}.conf
    popd
else
    echo "Session found.  Connecting."
fi
tmux attach-session -t $PROJECT_NAME

どこ tmux-myproject.confは、ウィンドウとペインを作成し、エディターを起動するtmuxコマンドのスタートアップシリーズです。

13
Anm

必要に応じてエイリアスを使用して新しいセッションを作成し、既に存在する場合はデフォルトセッションにアタッチします。

alias tmuxre='tmux new-session -t default || tmux new-session -s default'

これをサーバーの.loginに追加しました。

このようにした理由は、同じ実際のセッションにアタッチしたくはなく、同じウィンドウグループを使用する新しいセッションが必要だからです。

これは、screen -xRR

8
Michael

fishで同じことをしたい人のために:

tmux attach -t mysesh; or tmux new -s mysesh
1
tinyspark