Jawaban:
Dengan tmux 1.2 (dan lebih baru), Anda dapat menggunakan -p
opsi display-message
untuk menampilkan pesan ke stdout (alih-alih menampilkannya ke klien yang dilampirkan):
tmux display-message -p '#S'
#S
diformat sebagai nama sesi (lihat deskripsi status-left
opsi di halaman manual).
Saya terkejut bahwa, setelah hampir 5 tahun, tidak ada yang menunjukkan bahwa kedua jawaban ini tidak memadai. Meskipun keduanya berfungsi dengan baik selama TTY saat ini melekat pada satu-satunya sesi tmux pada host, jawaban ini keduanya gagal jika:
Dalam kasus sebelumnya, kedua jawaban di sini melaporkan kembali nama sesi terlampir (terlepas dari apakah tty saat ini diatur oleh sesi itu). Dalam kasus terakhir, hasilnya cenderung tidak pasti atau akan menghasilkan beberapa jawaban.
Pertanyaan yang semestinya adalah, "Apa nama sesi tmux tempat sesi terminal saya saat ini dilampirkan?"
Karena ia menjawab bahwa pertanyaan, jalankan:
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}'
Ini berfungsi terlepas dari jumlah sesi tmux (terpasang atau tidak) dan terlepas dari apakah sesi terminal saat ini adalah atau bukan bagian dari sesi tmux.
tmux list-panes -a -F '#{pane_tty} #{session_name}'
untuk membuat daftar setiap sesi sesi. Tidak yakin seberapa baru -a
, jadi YMMV.
TMUX
variabel lingkungan sebelum berjalan tmux display-message -p '#S'
untuk pengaturan desktop biasa.
Jawaban tim-orang yang diperpanjang / dikoreksi
sesuai komentar don_crissti
tentang Mengapa ini grep -v
tidak berfungsi seperti yang diharapkan? .
"$ (tty)" perintah dalam jawaban tim-people
| grep "$ (tty)" |
tidak akan bekerja dalam konteks itu seperti yang diharapkan. Ini mengevaluasi ke string 'bukan tty'.
Menggantinya dengan variabel memecahkan masalah ini.
tty = $ (tty)
...
| grep "$ tty" |
Juga, ketika tidak ada sesi tmux, kode asli akan dihasilkan
"tidak ada server yang berjalan pada pesan kesalahan / tmp / tmux-1000 / default" .
Tambah 2>/dev/null
dan kode akan berjalan tanpa mencetak pesan kesalahan.
Kode yang dimodifikasi dibaca sebagai:
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
.Alih-alih, saya menemukan ini berfungsi secara akurat untuk saya:
if [[ -n "$TMUX_PANE" ]]; then
session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi