Yanıtlar:
İle tmux (daha sonra ve) 1.2 kullanabileceğiniz -p
seçeneği display-message
(yerine ekli müşteriye bunu gösterme) Stdout'a çıkışına bir ileti:
tmux display-message -p '#S'
#S
oturum adı olarak biçimlendirilmiştir (kılavuzdaki status-left
seçeneğin açıklamasına bakınız ).
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:
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.
tmux list-panes -a -F '#{pane_tty} #{session_name}'
. Ne kadar yeni olduğundan emin değil -a
, o yüzden YMMV.
TMUX
iç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'
.
Genişletilmiş / düzeltilmiş tim-insanların cevabını
göre don_crissti yorumuna
üzerinde bu yüzden grep -v
beklendiğ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/null
ve 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}'
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