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


92

私が使用する場合

tmux attach

実行中のセッションにアタッチできますが、実行中のセッションがない場合、エラーが発生するだけです

no sessions

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

tmux attach-or-create-new-session

回答:


51

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

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

実行tmux attachしてセッションがある場合、セッションにアタッチされます(既にアタッチされているかどうかは関係ありません)。セッションがまだない場合は、セッションが作成されます。


11
これは巧妙なトリックですが、警告がありtmuxます:引数なしで呼び出された場合、新しいセッションを作成し、のこの行に到達するとすぐに2番目のセッションを作成します~/.tmux.conf。この問題tmux lsは、最初のセッションの作成後に実行することで確認できます。実際には、あなたがあなたのファイルでこれを入れた後、あなたは呼び出すことはできませんtmuxもう、引数なしで
ブルーノPolaco

4
したがってalias tmux="tmux attach"、この問題を防ぐためにエイリアスを追加する必要があります
rubo77

@BrunoPolaco:常に実行されている余分な空のtmuxセッションの大きな注意点は何ですか(それ以外はタスクリストできれいに見えません)。
rubo77

@ rubo77リソース。一部の人々は、起動時にいくつかのデフォルトのツール、ウィンドウ、ペインなどを作成しますtmux
rovr138

129

セッションに名前を付けても大丈夫な場合は、new-session次のコマンドを使用すると簡単です。

tmux new-session -A -s main

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

からman tmux

この-Aフラグは、セッション名がすでに存在する場合のnew-sessionように動作します。この場合、のように動作します。attach-session-D-dattach-session

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


10
+1組み込み機能を使用し、man docスニペットを提供するために
アリパトリック

1
エイリアスリスト:alias "tmux-attach-or-create-main-session=tmux new-session -A -s main"。ヒントをありがとう!マニュアルページ:openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
Jeroen Wiert Pluimers

tmux: unknown option -- Aこれは最近のバージョンでのみ利用できるようです。
xApple

これは私が使用した方法ですが、「tmux detach」は使用できなくなりました。既存のセッションを保存して終了するには、ショートカット<ctrl> b-dを使用する必要があります。
ジェス

2
[ -z "$TMUX" ] && exec tmux new -As .これは私が私の家で使用するもの.bashrcです。
ライナス

30

attachでエラーが発生すると、これにより新しいセッションが開始されます。

tmux attach || tmux new

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

tm="tmux attach || tmux new"

あなたも変更することで、それを短くすることができますtmux attachのためにtmux a
ブルーノPolaco

これは機能的ですが、Wesley Baughのソリューションはtmuxの組み込み機能を使用して同じことを行います
アリパトリック

FWIWこれは-Aが導入される前に、古いバージョン(例えばバージョン1.6)のための最良の答えのように思えるん
クリストファー・ピーターソン

3

以下を追加することを検討してください .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

githubリポジトリの ZSHリソースファイルでこれを使用していることがわかります。


2

Wesley Baughの答え(ログインの.bashrcで使用されたときは二重ネストセッションでした)を拡張し、sudo -sサーバーでよく使用するので少し柔軟性を追加します(これは.bashrcを再度ロードし、ネストを二重にします)。 .bashrcにあるもの:

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

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


1

ドリュー・フランクはここで答えました: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の回答を少し改善しました。このブロックを私の一番上に置きます.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.