Tmux - Bir komut dosyasındaki bir pencerede her bölmenin # bölmesini al?


12

Tmux'daki belirli bir bölmenin bölme dizinini bulmanın bir yolu var mı?

Ben şöyle bir şey çalıştırabilir biliyorum:

tmux display-message -p  "#{pane_index}"  

ancak bu yalnızca etkin bölmede çalışır. Çalıştırdığı bölmede çalışmasını istiyorum. Normalde, etkin bölmede olmayan bir bölmede bir komut dosyası çalıştırmak zordur, ancak :set-window-option synchronize-panestüm bölmeler arasında girişi eşitlemek için kullanabilirsiniz .

Bunu nasıl kullanırım?

İşimde bir yük dengeleyicisinde aynı anda birden çok özdeş sunucuya bağlanmam gerekiyor, ki bu da Tmux bölmeleriyle yapıyorum. Normalde, her bir panoya aynı türden aynı anda gönderilen her şeyi göndermeme izin vermek için bölmeleri senkronize et özelliğini etkinleştiriyorum. Harika çalışıyor.

Bulduğum şey, sunuculara bağlanmak ve her seferinde aynı "bölme dizinini" kullanarak bazen her bölmeye özgü bir şey yapmak istiyorum. Örneğin, şöyle bir komut çalıştırırdım:

ssh NODE_$(get_pane_number)

senkronize edildiğinde ve her bölmede çalıştırıldığında, 4 bölmeli bir pencerede aşağıdaki komutları çalıştırır:

ssh NODE_0 bölmede 0

ssh NODE_1 bölmede 1

ssh NODE_2 bölmede 2

ssh NODE_3 bölmede 3

Elbette bunu senaryolayabilirim, ancak girişleri senkronize etmeye başlamadan önce bu iyi olurdu . Girişleri de senkronize etmeye başladıktan sonra bunu yapmak istediğim zamanlar var.

Yanıtlar:


12

tmux (v1.5'ten beri), bir bölme için başlattığı işlem ortamında TMUX_PANE sağlar; her yeni bölme, sunucuya özel bir değer alır. Dolayısıyla, TMUX_PANE'nin ortamınızda kullanılabilir olduğunu varsayarsak, bu istediğinizi düşündüğüm şeyi yapmalıdır:

tmux display -pt "${TMUX_PANE:?}" '#{pane_index}'

${…:?}Eksik veya boş bir parametre Bourne gibi kabuk önler genişleme söz dizimi. Bu durumda, boş bir genişletme, "şu anda etkin değil" genellikle "bu bölme" ile aynı olan "şu anda etkin bölmeyi" kullanma varsayılanına geri döner (komutun tty'si büyük değilse büyük olasılıkla farklılık gösterir o tmux başladı; örneğin, çünkü kullanmanın komut veya beklemek ) vesaire.


tatlı! Tamamen yaptı ... çok takdir etmek!
Brad Parks

"$ {TMUX_PANE :?}" sözdizimi balık kabuğunda çalışmıyor
CodyChan

2

Tüm bölme dizinini ve bölmelerle ilgili diğer birçok bilgiyi

tmux list-panes -a

tmux(1)Alabileceğiniz ve üzerinde çalışabileceğiniz bilgilerin bir listesini almak için FORMATS'a bakın .


1
geri bildirim için teşekkürler - ama bu hangi bölmenin hangisi olduğunu söylemiyor - sadece bir pencerede 0-3 bölmeleri var, ki zaten anlayabiliyorum. Bölme etkin olmadanget_pane_number aslında doğru # döndüren adlı bir bash komut dosyası yazmak istiyorum .
Brad Parks

2

Önerilen iki çözümü temel alarak, bu işlevi benim için işe yaradı buldum:

I=$(tmux list-panes -a | grep $TMUX_PANE 2>/dev/null | awk -F: '{print $2}' | awk -F. '{print $2}')

veya index = 1 ile başlayan aynı şey

I=$(($(tmux list-panes -a | grep $TMUX_PANE 2>/dev/null | awk -F: '{print $2}' | awk -F. '{print $2}') + 1))

Bu en güzel değil ama işe yarıyor ve bende bırakabilir .bashrcve sadece $Iihtiyacım olduğunda kullanabilirim

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.