1. ホーム
  2. shell

[解決済み] 別のtmuxセッションの中でtmuxセッションを開いたときに、コマンドを送信するにはどうすればよいですか?

2022-05-07 18:31:40

質問

典型的なシチュエーションとしては、以下のようなものが考えられます。

$ tmux
  [0] $ ssh example.com
      $ tmux attach
        [0] $ 

tmuxセッションを開き、サーバーにsshでログインして、既存のtmuxセッションにアタッチします。この時点では、1つのtmuxセッションが別のセッションの中に入っています。どのように内部のtmuxセッションにコマンドを送信するのですか?

注:両方のtmuxセッションは同じキーバインディングを持っています。

解決方法は?

その send-prefix コマンドを使用すると、アクティブペイン(で実行中のプロセス)にプレフィックスキーを送ることができます。デフォルトでは、プレフィクスは C-b C-b にバインドされています。 send-prefix (そのため、2回叩くと、1回分の C-b をアクティブペインに送る)。これはちょうど、内側の tmux インスタンスを作成します。

最初の C-b は、"outer" で捕捉されます。 tmux インスタンスをそのプレフィックスキーとして使用します。もうひとつは、"外側の" tmux インスタンスが起動し、その C-b バインディング( send-prefix ). これは C-b を外側のインスタンスのアクティブペインに送信します。このペインで実行されているプロセスは、(最終的には ssh インスタンス)は、"inner" tmux インスタンスです。をキャプチャします。 C-b をプレフィックスキーとする。これで、次のキー入力は外側の tmux のインスタンスを作成し、内側のインスタンスでバインディングをトリガーするためにキャプチャします。

をトリガーするために c バインディング( new-window の第2レベルのインスタンスで tmux と入力すると、次のようになります。 C-b C-b c . の第3レベルのインスタンスの場合 tmux と入力します。 C-b C-b C-b C-b c .

の複数のレイヤーを共通に扱う場合、この各レベルの2重化は迷惑になることがあります。 tmux . もし他のキーに余裕があれば、接頭辞のないバインディングを作れば、(おそらく)入力が楽になるはずです。

bind-key -n C-\ send-prefix
bind-key -n C-^ send-prefix \; send-prefix

第二階層に新しいウィンドウを作成する tmux : C-cc

第3階層に新しいウィンドウを作成する tmux : C-^ c (または C- C )


の数が限られている場合は tmux コマンドを(簡単に)下層の tmux インスタンスを使用する場合、代わりに send-keys を使用して、特定のバインディングを作成します(トップレベルの tmux のインスタンス)。

bind-key C-c  send-keys C-b c
bind-key C    send-keys C-b C-b c

第二階層に新しいウィンドウを作成する tmux : C-b C-c

第3階層に新しいウィンドウを作成する tmux : C-b C