tmuxセッション内から新しいtmuxセッションを作成する


105

tmux内にセッションが存在するかどうかに応じて、特定のセッションを作成/アタッチまたは切り替えるシェルスクリプトを書いています。

tmuxセッション内から新しいtmuxセッションを作成する必要がある場合を除いて、すべてがうまく機能しています。

スクリプトを実行するtmux new-session -s nameと、次の出力が得られます。

セッションは慎重にネストする必要があります。$ TMUXを設定解除して強制します

実際にはセッションをネストしたくありません。別のセッション作成し、それをtmuxセッション内から切り替えることを目標としています

これは可能ですか?


2
この質問を見つけたユーザーに最適な
0xSheepdog

回答:


142

最短の方法(ctrl-bコマンドプレフィックスとして使用する場合):

ctrl-b :new

新しいセッションを作成するには、

ctrl-b s

セッションをインタラクティブに選択してアタッチします。


5
「セッションは慎重にネストする必要があります。$ TMUXを強制的に解除する」を気にしないソリューションの+1
Marcin Rogacki

3
そして、あなたはあなたのセッションの名前を変更することができます:ctrl-b $
nha

21
そして、Ctrl-b :new -s <name>新しいセッションに名前を与えます。
Ain Tohvri 2015

32

スクリプトの作成方法

このスクリプトは、セッションが存在するかどうかを確認します。セッションが存在しない場合は、新しいセッションを作成して接続します。セッションが存在する場合、何も起こらず、そのセッションにアタッチします。`〜/ development 'をプロジェクト名に置き換えてください。

$ touch ~/development && chmod +x ~/development

# ~/development

tmux has-session -t development
if [ $? != 0 ]
then
  tmux new-session -s development
fi
tmux attach -t development  

端末からの新しいセッション

2つの切り離されたセッションを作成し、それらを一覧表示し、1つに接続してから、tmuxサイクル内からセッションを実行してみましょう。

tmux new -s name -d新しい分離セッションを作成しているため、tmux内から機能します。そうしないと、ネストエラーが発生します。

$ tmux new -s development -d
$ tmux new -s foo -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
$ tmux attach -t
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]

tmux内からの新しいセッション

これで、ターゲットセッションに接続されているか、アタッチされていることがわかります。接続中に新しいセッションを作成しようとすると、ネストエラーが発生します。

$ tmux new -s bar
> sessions should be nested with care, unset $TMUX to force

これを解決するために、新しい分離セッションを作成します。例えば、

$ tmux new -s bar -d
$ tmux ls
> development: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54] (attached)
> foo: 1 windows (created Wed Jan 13 11:31:38 2016) [204x54]
> bar: 1 windows (created Wed Jan 13 17:19:35 2016) [204x54]

セッションの切り替え(切り替え)

  • Prefix ( 前のセッション
  • Prefix ) 次のセッション

注記: PrefixあるCtrl-bデフォルトで。あなたはバインドできるPrefixCtrl-aあなたはキャップCTRLにロック変更することができますおよびMac OSXでsystem preferences > keyboard > modifier keys

tmux内でコマンドモードを使用してセッションに接続する

デタッチせずにセッションにアタッチしようとすると、エラーが発生します。

$ tmux attach -t development
> sessions should be nested with care, unset $TMUX to force

代わりにコマンドモードを使用してからPrefix :、タイプattach -t session_nameしてEnterキーを押します。


非常に完全な答えをありがとう、これは一度にいくつかの私の質問に答えました!
mdekkers 2018年

24

これを使用すると私にとってはうまくいきます:

TMUX= tmux new-session -d -s name
tmux switch-client -t name

TMUX=tmuxのがスローされませんので、最初の行には、要求されsessions should be nested with care, unset $TMUX to forceたメッセージを。


1
:への最初の行を変更した後、私のスクリプトで素晴らしい作品TMUX=`tmux new-session -d -s name`
マイケル・ロビンソン

17

あなたの端末内に起動することができますすべてのコマンドは、のようにtmux new -s sessionName内から起動することができますtmux:トリガーキー(例えば押すことによってctrl-b、その後の):起動せずに、コマンドをtmux一部。

結果として、ctrl-b :followedは、new -s sessionName希望どおりの処理を行い、セッションに名前を付けます。また、新しいセッションに自動的に切り替わります。


9

あなたがunset TMUX最初に試すことができます、これは私のために働きます。


7

user2354696のアドバイスで、次のキーバインディングを使用して新しいセッションを作成するか、既存のセッションを「複製」します。

bind-key N run-shell 'TMUX = tmux new-session -d \; スイッチクライアント-n '
bind-key C run-shell 'TMUX = tmux new-session -t $(tmux display-message -p #S)-s $(tmux display-message -p#S-clone)-d \; スイッチクライアント-n \; display-message "セッション#Sクローン" "
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.