Nama sesi disimpan dalam variabel tmux#S
, untuk mengaksesnya di terminal , Anda bisa melakukannya
tmux display-message -p "#S"
Jika Anda ingin menggunakannya .tmux.conf
, sederhana saja #S
. Perhatikan bahwa -p
opsi akan mencetak pesan pada stdout, jika tidak pesan ditampilkan di baris status tmux .
Jika perintah di atas disebut di dalam sesi, itu mengembalikan nama sesi. Jika dipanggil di luar sesi apa pun, masih mengembalikan nama sesi yang masih berjalan terakhir. Saya tidak dapat menemukan perintah tmux untuk memeriksa, apakah ada di dalam sesi atau tidak, jadi saya harus membuat pekerjaan ini:
tmux list-sessions | sed -n '/(attached)/s/:.*//p'
tmux list-sessions
menunjukkan semua sesi, jika ada yang terpasang, itu menunjukkan (attached)
di akhir. Dengan sed, kami menekan semua output (opsi -n
) kecuali di mana kami menemukan kata kunci (attached)
, pada baris ini kami memotong setiap setelah :
, yang membuat kami dengan nama sesi. Ini berfungsi untuk saya di dalam dan di luar sesi, bukan tmux display-message -p "#S"
.
Tentu saja ini hanya berfungsi jika tidak ada :
dan tidak ada (attached)
dalam nama sesi.
Seperti dikomentari oleh Chris Johnsen , cara untuk memeriksa apakah ada di dalam sesi tmux adalah untuk melihat apakah variabel lingkungannya diatur:
[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
tmux
sesi dan yang lain saya di luartmux
sesi. Ketika saya mengetikkan keduanya perintahtmux display-message -p "#S"
, hasil yang sama dicetak dan nilai kembali dari kedua perintah itu sama.[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
Lihat di sini , menggunakan posting ini saya mengerti bahwa satu hal yang membedakan
tmux
klien adalah nama merekatty
tetapi sesi adalahtmux
properti server dan sama ketika kita melihat nama sesi dari dalam atau luartmux
klien. Selanjutnya, kita dapat menggunakantmux info | head
yang menampilkan pid dan tty dari klien dan pid dari server.Nilai pengembalian perintah berikut adalah 0 jika kita berada di dalam
tmux
klien atau bukan nol jika kita menjalankan di luartmux
klien. Jika Anda menjalankannya dari skrip, pastikan Anda menggunakan ppid bukan $$ karena tty dikaitkan dengan proses shell bukan skrip yang Anda jalankan.Satu cara mudah tetapi kurang kuat untuk mengetahui apakah kita berada di dalam atau di luar
tmux
klien adalah dengan melihat variabel lingkungan TERM. Tampaknya di luar klien tertulis 'xterm' tetapi di dalamnya tertulis 'layar'. Namun, saya menemukan cara pertama jauh lebih baik.sumber
Berikut skrip perl; menjadikannya skrip shell atau fungsi skrip shell adalah latihan yang tersisa untuk pembaca.
Ini menghasilkan output berikut dalam sesi TMUX:
Di luar sesi TMUX akan menghasilkan yang berikut:
Anda dapat membuang
print
pernyataan dan hanya menggunakan kode keluar jika Anda ingin menggunakan ini dalam skrip shell atau sesuatu.sumber