Başka bir tmux oturumunda tmux oturumu açarken komutlar nasıl gönderilir?


136

Tipik bir durum şunlar olabilir:

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

Bir tmux oturumu açıp bir sunucuya ssh veriyorum ve varolan bir tmux oturumuna ekliyorum. Bu noktada bir tmux oturumu var. İç tmux oturumuna nasıl komut gönderirim?

Not: Her iki tmux oturumu da aynı tuş bağlantılarına sahiptir.


4
programlama sorusu değil. Lütfen superuser.com'u deneyin . İyi şanslar.
shellter

1
Sorunun taşınmasını istemekten memnuniyet duyuyorum, ancak bağlam için kod için tmux içinde vim kullanıyorum ve elbette bu sorunun oluştuğu diğer sunuculara da ssh gerekiyor.
Kris

Yanıtlar:


207

send-prefixKomutu öneki tuş etmek (süreç içinde çalışan) etkin bölmeyi göndermek için kullanılabilir. Varsayılan olarak, önek Cb'dir ve Cb'ye bağlanır send-prefix(böylece iki kez vurulması etkin bölmeye tek bir Cb gönderir ). İç tmux örneğinin bağlarına erişmek için ihtiyacımız olan şey budur .

İlk Cb "dış" tmux örneği tarafından önek anahtarı olarak yakalanır . İkincisi “dış” tmux örneği tarafından yakalanır ve Cb bağlanmasını ( send-prefix) tetikler . Bu , dış örneğin etkin bölmesine bir Cb gönderir . Bu bölmede çalışan işlem (nihayetinde bir ssh örneği aracılığıyla ) “iç” tmux örneğidir. Cb'yi önek anahtarı olarak yakalar . Şimdi bir sonraki tuş vuruşunuz dış tmux örneğinden geçirilecek ve bir bağlamayı tetiklemek için iç taraf tarafından yakalanacaktır.

Tetiklemek için c (bağlanma new-windowbir ikinci seviye örneği) tmux , şunları yazın Cb Cb c . Üçüncü düzey Örneğin tmux yazarsınız Cb Cb Cb Cb c .

Birden fazla tmux katmanı ile uğraşıyorsanız, her seviye için bu ikiye katlama can sıkıcı olabilir . Başka bir anahtar yedekleyebiliyorsanız, işlerin yazılmasını (muhtemelen) kolaylaştırmak için ön ekli olmayan bir ciltleme yapabilirsiniz:

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

İkinci seviye tmux'da yeni pencere oluştur : C- \ c
Üçüncü seviye tmux'da yeni pencere oluştur : C- ^ c (veya C- \ C- \ c )


Alt düzey tmux örneklerine (kolayca) göndermek istediğiniz sınırlı sayıda tmux komutunuz varsa, bunun yerine bazı belirli bağlantılar (muhtemelen yalnızca üst düzey tmux örneğinizde) oluşturmak için kullanabilirsiniz:send-keys

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

İkinci düzey yeni pencere oluşturun tmux : Cb Cc
üçüncü düzey yeni pencere oluşturun tmux : Cb C


Ayrıca ben yorumlamak zorunda benim mevcut last-windowyaparken bu adıyla bağlama C-a C-agibi: #bind-key C-a last-window. Ön ekimin avarsayılan olduğunu unutmayın b.
Kris

1
bind-key -n C-\ send-prefixçalışmıyor. Benim tmux'um \ 'u tanımıyor. Bir mektup kullandığımda işe yarıyor.
darksky

@Darksky: Hangi tmux sürümünü kullanıyorsunuz? 1.7, 1.6 ve 1.5 ile benim için çalışıyor. Eğer bir kabuk komutundan (yani tmux bind-key -n 'C-\' send-prefix) bağlamayı yapıyorsanız kesinlikle ekstra bir alıntı seviyesi eklemeniz gerekecektir ; çalışmasını ~/.tmux.conf(veya bir Önek :komut satırını) almakta sorun yaşıyorsanız , benzer alıntıyı (yani bind-key -n 'C-\' send-prefix) deneyebilirsiniz .
Chris Johnsen

51

İç kısma erişmek için kontrolü basılı tutun ve B tuşuna iki kez basın.


7

DÜZENLE:

İçin bir varsayılan kontrol tuşu komutu olduğundan, bir bağlama anahtarı olarak kullanmanızı tavsiye ETMEMC-q

ekranı dondurur ve ekran görüntüsünün devam etmesini sağlar

Burada bir durum olur ve @Paschalis bir çözüm sağlar:

iki kez şanssız (ön ek olarak Cq ile uzak tmux oturum) olmak olur: Tür Cltr-q, daha sonra :, ve tmux girmek:send-keys C-q

Aşağıda cevap:


Basitleştirmek için, aşağıdaki satırı ~/.tmux.conf

bind-key -n C-q send-prefix

Ardından , uzak tmux'unuz için doğrudan bağlantıC-q anahtarı olarak kullanabilirsiniz .


Birisi dış tmux'daki varsayılan bağlayıcı anahtarını değiştirdiyse, yukarıdaki snippet'in çalışması için iç tmux'da aynı varsayılan bağlayıcı anahtarını kullanması gerekir!
Paschalis

benim yerel tmux (benim durumumda Ctrl +]) önek değiştiriyorum böylece sunuculardaki tüm "iç" tmux-es önek için varsayılan bağlama var
eylemsiz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.