127

セッションが tmux 内にあるかどうか、およびセッションが存在するかどうかに応じて、特定のセッションを作成/接続または切り替えるシェルスクリプトを作成しています。

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

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

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

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

これは可能ですか?

4

6 に答える 6

182

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

ctrl-b :new

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

ctrl-b s

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

于 2014-01-22T01:46:43.407 に答える
40

スクリプトの作成方法

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

注: PrefixCtrl-bデフォルトです。Mac OSXにバインドできPrefixCtrl-aMac 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 キーを押します。

于 2016-01-13T22:15:05.610 に答える
25

これを使用するとうまくいきます:

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

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

于 2013-05-06T12:51:31.840 に答える
15

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

于 2013-07-09T04:42:01.667 に答える
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 \; 表示メッセージ「セッション #S のクローンが作成されました」'
于 2015-03-25T14:24:46.813 に答える