web-dev-qa-db-ja.com

セッションが存在する場合にアタッチしてtmuxを開始する方法

私が使うなら

tmux attach

実行中のセッションにアタッチできますが、実行中のセッションがない場合、エラーのみが表示されます

no sessions

実行中のセッションがない場合、新しいセッションを自動的に開始するにはどうすればよいですか?何かのようなもの

tmux attach-or-create-new-session
115
rubo77

答えははるかに簡単です。これを~/.tmux.confファイルに入れるだけです:

# if run as "tmux attach", create a session if one does not already exist
new-session -n $Host

tmux attachを実行していて、セッションがある場合は、そのセッションにアタッチされます(すでにアタッチされているかどうかに関係なく)。 notセッションがすでにある場合は、セッションが作成されます。

61
Joe Casadonte

セッションに名前を付けても問題ない場合は、new-sessionコマンドで簡単に実行できます。

tmux new-session -A -s main

ここで、mainは、必要に応じてアタッチまたは作成されるセッション名です。

man tmuxから:

-Aフラグはnew-sessionattach-session ifセッションのように動作するようにします-nameはすでに存在しています。この場合、-D-dからattach-sessionのように動作します。

また、-Aオプションは tmux version 1.8 from 2013年3月26日 で導入されていることに注意してください。以前のバージョンでは、tmux attach || tmuxを使用します。

156
Wesley Baugh

Attachでエラーが発生した場合は、新しいセッションが開始されます。

tmux attach || tmux new

したがって、エイリアスはその仕事をします:

tm="tmux attach || tmux new"
38
rubo77

.bashrcに以下を追加することを検討してください

if [ -z "$TMUX" ]; then
    base_session='my_session'
    # Create a new session if it doesn't exist
    tmux has-session -t $base_session || tmux new-session -d -s $base_session
    # Are there any clients connected already?
    client_cnt=$(tmux list-clients | wc -l)
    if [ $client_cnt -ge 1 ]; then
        session_name=$base_session"-"$client_cnt
        tmux new-session -d -t $base_session -s $session_name
        tmux -2 attach-session -t $session_name \; set-option destroy-unattached
    else
        tmux -2 attach-session -t $base_session
    fi
fi

my github repo にあるZSHリソースファイルで、これの使用を確認できます。

3
sparticvs

Wesley Baughの回答(ログイン時に.bashrcで使用した場合、二重のネストセッションでした)を拡張し、サーバーでSudo -sを頻繁に使用するため、柔軟性を少し追加します(これにより、.bashrcを再び忠実にロードし、ダブルネスト)、これが私の.bashrcにあるものです:

if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
    tmux new-session -A -s main
fi

これはtmuxセッションをチェックし、新しいセッションを作成する前、またはmainという名前の既存のセッションにアタッチする前に、スーパーユーザーでないことを確認します。

2
Celsius1414

@SuperMagicの回答を少し改善しました。このブロックを.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
1
cmcginty

これを.shrcファイルまたはexecと同様に使用している場合は、

if tmux ls
  exec tmux attach
else
  exec tmux
fi
1
Aaron J Lang

ドリュー・フランクはここでこれに答えました: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

これが私が現在このために使用しているスクリプトです(ただし、tmuxの別の問題が原因で画面に戻りました)/somewhere/on/your/path/ttmuxまたはシェル関数として:

#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2

-2オプションを指定すると、tmuxは256色の端末サポートを想定するため、状況に適さない場合があります。

1
SuperMagic

このブログ の代替ソリューションを次に示します。魅力のように機能します。

session="main"

# Check if the session exists, discarding output
# We can check $? for the exit status (zero for success, non-zero for failure)
tmux has-session -t $session 2>/dev/null

if [ $? != 0 ]; then
  # Set up your session
fi

# Attach to created session
tmux attach-session -t $session

から man page

has-session [-t target-session] (alias: has)
Report an error and exit with 1 if the specified session does not exist.
If it does exist, exit with 0.
0
Levon