Tmux komutunu çalıştırarak mevcut tmux oturumunun adını nasıl bilebilirim?


34

Bir senaryo yazıyorum. Bunu gerçekten bilmek istiyorum. Umarım tmux çalıştırılabilir bana bunu söyleyebilir.

buldum

tmux rename <newname>

Geçerli oturumu yeniden adlandırabilir. Ancak kendi adını almak için bir komut bulamıyorum.

Yanıtlar:


49

İle tmux (daha sonra ve) 1.2 kullanabileceğiniz -pseçeneği display-message(yerine ekli müşteriye bunu gösterme) Stdout'a çıkışına bir ileti:

tmux display-message -p '#S'

#Soturum adı olarak biçimlendirilmiştir (kılavuzdaki status-leftseçeneğin açıklamasına bakınız ).


+1, cevabımdan çok daha iyi.
chepner

OpenSUSE 11.3 otomatik çevrimiçi güncelleme için tam sürüm olan tmux 1.2 gerektirdiğini belirttiğiniz için teşekkür ederiz.
Jimm Chen

Tmux 1.8 ile bu oturumda çalışmadığım zamanlarda bile bağlı bir oturumun ismini döndürür.
Mihai Danila

Tim People'ın aşağıdaki yanıtı tmux 1.8 ve üstü ile çalışıyor ve yükselttiği noktalara değiniyor. Bu daha iyi cevap.
Alexandros

8

Neredeyse 5 yıl sonra, hiç kimsenin bu cevapların hiçbirinin yeterli olmadığını belirttiğine şaşırdım. Her ikisi de geçerli TTY, ana bilgisayardaki tek tmux oturumuna ekli olduğu sürece gayet iyi çalışsa da, bu yanıtların her ikisi de:

  1. Geçerli terminal oturumu bir tmux oturumunun parçası değil veya
  2. çoklu, ekli tmux seansları var

Eski durumda, buradaki her iki cevap da ekli oturumun adını bildirir (geçerli tty'nin o oturum tarafından yönetilip yönetilmediğine bakılmaksızın). İkinci durumda, sonuç belirsizdir veya birden fazla yanıtla sonuçlanır.

Doğru soru, "Geçerli terminal oturumumun eklendiği tmux oturumunun adı nedir?" Olmalıdır.

O cevap için o soruya, yürütün:

for s in $(tmux list-sessions -F '#{session_name}'); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$(tty)" | awk '{print $2}'

Bu, tmux oturumlarının sayısına bakılmaksızın (ekli veya başka şekilde) ve mevcut terminal oturumunun bir tmux oturumunun parçası olup olmadığına bakılmaksızın çalışır.


1
Mükemmel cevap. Bölmelerini listelemek için her oturum adı arasında dolaşmak yerine, her oturumun bölmelerini listelemek için de kullanabilirsiniz tmux list-panes -a -F '#{pane_tty} #{session_name}'. Ne kadar yeni olduğundan emin değil -a, o yüzden YMMV.
Brian Cline

Kabul edilen cevabı kullanıp, burada açıklanan sorunlara göre başarısız olduktan sonra bu soruya geri döndüm. Lütfen bunu oyla. Mümkünse kabul edilen cevap değiştirilmelidir.
Alexandros

1
Tipik bir masaüstü kurulumu TMUXiçin çalıştırmadan önce ortam değişkenini kontrol etmekle birleştirilmişse Yöntem 1 iyi çalışır tmux display-message -p '#S'.
ZeroPhase

8

Genişletilmiş / düzeltilmiş tim-insanların cevabını göre don_crissti yorumuna üzerinde bu yüzden grep -vbeklendiği gibi çalışmıyor? .

Tim-halkların cevabında "$ (tty)" komutu

| grep "$ (tty)" |

beklendiği gibi bu bağlamda çalışmayacaktı. Bir tty değil 'tty' olarak değerlendirilir.

Bir değişkenle değiştirmek, bu sorunu çözer.

Tty = $ (tty)

...

| grep "$ tty" |

Ayrıca, tmux oturumu olmadığında, orijinal kod üretilir

"/ tmp / tmux-1000 / default üzerinde çalışan sunucu yok" hata mesajı.

Ekle 2>/dev/nullve kod, hata iletisini yazdırmadan çalışacaktır.

Değiştirilmiş kod şu şekildedir:

tty=$(tty)
for s in $(tmux list-sessions -F '#{session_name}' 2>/dev/null); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$tty" | awk '{print $2}'

1
Gelişme nedir? Gerekirse cevap olarak düzenlemek yerine sunmayı düşünmelisin. İyi bir cevap vermek için, muhtemelen biraz daha açıklayıcı bir metin eklemeyi düşünmelisiniz.
Seth,

1
@seth, yorum yapmak istedim ama garip bir şekilde bunu yapmak için yeterli krediniz yoktu.
parlak taraf

Yorum yapmak için 50 itibara ihtiyacınız var . Satır sonları ve benzeri şeyler bulunmadığından, karmaşık kodla yorum yapmak genellikle iyi bir fikir değildir. Düzenleme IMHO oldukça iyi bir cevap yaptı.
Seth

Oh, şimdi anlıyorum. "Tty" meselesi sert bir şey. Bu oyuncak kabuğunu kullanmıyorum: D
Tim Peoples

1
@TimPeoples Bu bir Bash meselesi olabilirken. Bash, modern terminallerde uyumluluk için kabuk komut dosyalarını kodlamak için hala standarttır. Tabii ki, posix standardı idealdir; ancak bash, daha gelişmiş terminallerin paylaştığı bazı özelliklere sahiptir. Bash'i vurarak diğer büyük terminallerin çoğu sadece çalışmalı. Sadece kabuk kontrolü yapıyorum ve bir sürü kötü hata ve biçimlendirme sorunu yakaladım. (çoğunlukla daha açıklayıcı sözdiziminin yerine eski sözdizimini kullanıyor)
ZeroPhase

4
  • Chris Johnsen'in cevabı, birinin dışından arama yaparken bile bir oturum adı veriyor.
  • parlak tarafın ve Tim Halklarının cevabı a tty.

Bunun yerine, bunun benim için doğru çalıştığını gördüm:

if [[ -n "$TMUX_PANE" ]]; then
    session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi

3

İdeal değil, ancak ekli oturumun ismini şu şekilde çıkarabilirsiniz awk:

tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'

Özel biçim, varsayılandan ayrıştırmak için biraz daha kolaydır.

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.