web-dev-qa-db-ja.com

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

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

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

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

セッションは注意して入れ子にし、強制的に$ TMUXの設定を解除する必要があります

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

これは可能ですか?

87

最も簡単な方法(コマンドプレフィックスとしてctrl-bを使用する場合)は次のとおりです。

ctrl-b :new

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

ctrl-b s

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

117
msharp

スクリプトを作成する方法

このスクリプトは、セッションが存在するかどうかを確認します。セッションが存在しない場合は、新しいセッションを作成して接続します。セッションが存在する場合、何も起こりません。そのセッションにアタッチします。 `〜/ 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内からの新しいセッション

現在、ターゲットセッションの内部にあるか、よりよく知られていますattached。接続中に新しいセッションを作成しようとすると、ネストエラーが発生します。

$ 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にバインドでき、Mac OSXではCaps Lockをctrl 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キーを押します。

26
Yonk

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

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

TmuxがTMUX=メッセージをスローしないように、最初の行のsessions should be nested with care, unset $TMUX to forceが必要です。

22
user2354696

端末内で起動できるすべてのコマンド(tmux new -s sessionNameなど)は、tmux内からトリガーキー(例:ctrl-b)を押してから:を起動し、その後tmux部分を開始せずにコマンドを起動できます。

その結果、ctrl-b :に続いてnew -s sessionNameを使用すると、必要な処理が正確に実行され、セッションに名前が付けられます。また、新しいセッションに自動的に切り替わります。

15
Morlock

最初にunset TMUXを試すことができますが、これは私にとってはうまくいきます。

7
Xiao Hanyu

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

 bind-key N run-Shell 'TMUX = tmux new-session -d \; switch-client -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 "session #S clone" '
5
user1384039