名前付きtmuxセッションが存在する場合、tmux session
にアタッチする方法を見つけようとしています。そうでない場合は、指定された名前で新しいセッションを作成します。
現在、私が探しているものを部分的に達成できるいくつかのtmux
コマンドを知っていますが、それらを組み合わせて探しているものを取得する方法は明確ではありません:
tmux attach
は自動的に既存のセッションにアタッチします-ただし、セッションが存在しない場合はエラーになりますtmux new
は新しいセッションを作成しますが、毎回作成するため、.tmux.conf
に残しておくことはできませんtmux has-session
はセッションが存在するかどうかをテストします-しかし、他のコマンドとセッションをつなぎ合わせる方法がわかりませんしたがって、セッションにログインする必要があるたびに手動で作成する代わりに、tmuxスクリプトを作成して、これが自動的に行われるようにします。
新しいtmuxセッションを作成する(特定のセッション名が存在しない場合)またはセッション名にアタッチする(存在する場合)ように自動スクリプトを作成するにはどうすればよいですか?
または、追加できます
new-session
あなたの.tmux.conf
-サーバーの起動時にデフォルトのセッションを作成します。
その後、tmux attach
は、現在のセッションに接続する(つまり、サーバーを実行する)か、新しいセッションを作成します(サーバーを起動し、構成ファイルを読み取り、new-session
command)そしてそれにアタッチします。
私はそれを理解しました( そして私に指摘してもらいました )。
tmux attach || tmux new
Petr Viktorin 、 jkoelker 、および pjincz のコメントで指摘されているように、次のコマンドを使用してmySession
存在する場合、および存在しない場合は作成します。
tmux new -A -s mySession
man tmux
から:
new-session
[-AdDEP] [-c
start-directory
] [-F
format
] [-n
window-name
] [-s
session-name
] [-t
group-name
] [-x
width
] [-y
height
] [
Shell-command
]
(別名:
new
)
session-name
。という名前で新しいセッションを作成します[...]
-A
フラグは、new-session
がattach-session
ifsession-name
がすでに存在する場合;この場合、-D
は-d
からattach-session
のように動作します。
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
起動時にプロジェクトベースの構成を含めるように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コマンドのスタートアップシリーズです。
必要に応じてエイリアスを使用して新しいセッションを作成し、既に存在する場合はデフォルトセッションにアタッチします。
alias tmuxre='tmux new-session -t default || tmux new-session -s default'
これをサーバーの.loginに追加しました。
このようにした理由は、同じ実際のセッションにアタッチしたくはなく、同じウィンドウグループを使用する新しいセッションが必要だからです。
これは、screen -xRR
。
fish
で同じことをしたい人のために:
tmux attach -t mysesh; or tmux new -s mysesh