web-dev-qa-db-ja.com

それ自体がすでにtmuxにあるtmuxセッションを切り離すにはどうすればいいですか?

ローカルマシンでtmuxセッションを開き、リモートマシンにSSHで接続しました。この後、リモートマシンで "tmux attach"コマンドを入力して、ローカルのtmuxセッションでリモートのtmuxセッションを得ました。

今、私はリモートのtmux sesstionをデタッチしたい、私が試した

C-b d

しかし、リモートのセッションではなく、ローカルのtmuxセッションを切り離しました。

リモートtmuxセッションを切り離すにはどうすればいいですか?

103
superadmin
C-b C-b d

(デフォルトのバインディングを仮定)

最初のC-bは、ローカルのtmuxによって解釈されます(すべてのキーストロークが最初に表示されるため)。 2番目のC-bは、ローカルtmuxがアクティブペインにC-bを送信するようにするコマンドです。これで生成されたC-bはリモートに到着しますtmuxdは、ローカルのtmuxをそのまま通過します。リモートに到達するとtmuxになり、detachコマンドが起動されます。

  1. C-bと入力します。
    あなたのローカルのtmuxはプレフィックスキーとして解釈します。ローカルのtmuxの下で実行されているプロセスには何も送信されません。
  2. C-bと入力します。
    あなたのローカルのtmuxsend-prefixコマンドにバインドされています。
    1. ローカルのtmuxは、アクティブペインで実行中のプロセスにCbを送信します(ssh).
    2. sshは、(sshdなどを通じて)リモートエンドで実行中のプロセスに転送します(remotetmux)。
      リモートのtmuxはプレフィックスキーとして解釈します。リモートのtmuxの下で実行されているプロセスには何も送信されません。
  3. dと入力します。
    あなたのローカルのtmuxは通常通りにパススルーします(2番目のCbはローカルの/に対する完全なコマンドキーシーケンスを終えたからです)tmux)。
    あなたのリモートのtmuxdetach-clientにバインドされています。アクティブなクライアントを切り離します。

これはC-btmuxセッション内で実行中のプログラムに送信する必要がある場合と同じです。Cbを通常のシェルに送信したい場合(たとえば、シェルがEmacsスタイルの編集を使用している場合、Cbbackward-char(および矢印キーを使うのは嫌いです。)CbCbを使って単一のCbをシェルに渡す必要があるでしょう。 。

148
Chris Johnsen

キーバインドを気にせずに正しいtmuxインスタンスにするもう1つの方法は、リモートtmuxセッションでtmux detachを入力することです。

43
Dave Wongillies

私は成功せずに最初の答えを試しました。

私は次のようにして欲しい結果を得ることができました:

tmux attach

私はtmuxに入り、他のセッションがまだ接続されているのを見ました

そこで私は現在のセッションを切り離してシェルに戻りました:Ctrl + b; d

それから私は以下を発行しました:tmux attach -d

これはデフォルトセッションにアタッチし、現在アタッチされている他のすべてのセッションをデタッチすることを意味します。 クライアントとセッションのmanページを参照してください。

attach-session[-dr] [-t target-session](別名:attach)tmuxの外部から実行する場合は、現在のディレクトリに新しいクライアントを作成します。端末とターゲットセッションにアタッチします。内側から使用する場合は、現在のクライアントを切り替えます。 -dが指定されている場合、セッションに接続されている他のすべてのクライアントは切り離されます。-rは、クライアントが読み取り専用であることを意味します)

8
bobby

他の方法を試したい場合は、以下の手順に従ってください。

  1. 現在のtmuxセッションをCtrl+b dでデタッチします。これで、通常の端末のコマンドラインプロンプトに移動します。
  2. tmux lsをしてください。現在接続されているセッションを探します
  3. このコマンドを実行して、すでにアタッチされているセッションをデタッチしますtmux detach-client -s <attached_session_name>
0
Ram