Cara memulai tmux dengan melampirkan jika ada sesi


Jawaban:


52

Jawabannya jauh lebih sederhana. Masukkan saja ini ke ~/.tmux.conffile Anda :

# if run as "tmux attach", create a session if one does not already exist
new-session -n $HOST

Jika Anda menjalankan tmux attachdan ada sesi, maka sesi akan dilampirkan ke sesi itu (apakah sudah terlampir atau belum). Jika belum ada sesi maka akan dibuatkan untuk Anda.


11
ini adalah trik yang rapi, tetapi ada peringatan: jika tmuxdipanggil tanpa argumen, itu akan membuat sesi baru dan kemudian membuat sesi kedua segera setelah mencapai baris ini di Anda ~/.tmux.conf. Anda dapat melihat masalah ini dengan menjalankan tmux lssetelah membuat sesi pertama . Dalam praktiknya, setelah Anda memasukkan ini ke dalam file Anda, Anda tidak dapat menelepon tmuxtanpa argumen lagi
Bruno Polaco

4
Jadi, Anda harus menambahkan alias alias tmux="tmux attach"untuk mencegah masalah ini
rubo77

@BrunoPolaco: apa peringatan besar dengan sesi tmux ekstra kosong yang berjalan sepanjang waktu (selain itu tidak terlihat rapi dalam daftar tugas)?
rubo77

@ rubo77 Sumber Daya. Beberapa orang memiliki beberapa alat default, jendela, panel, dll yang dibuat ketika diluncurkan tmux.
rovr138

129

Jika penamaan sesi Anda baik-baik saja, maka mudah dilakukan dengan new-sessionperintah:

tmux new-session -A -s main

di mana mainnama sesi yang akan dilampirkan atau dibuat jika diperlukan.

Dari man tmux:

The -Aflag membuat new-sessionberperilaku seperti attach-sessionjika sesi-nama sudah ada; dalam hal ini, -Dberperilaku seperti -duntuk attach-session.

Harap perhatikan juga bahwa -Aopsi ini diperkenalkan dalam versi tmux 1.8mulai 26 Maret 2013 , untuk versi sebelumnya, gunakan tmux attach || tmux.


10
+1 untuk menggunakan fungsionalitas bawaan dan memberikan cuplikan man doc
Ari Patrick

1
Dalam daftar alias saya: alias "tmux-attach-or-create-main-session=tmux new-session -A -s main". Terima kasih atas tipnya! Halaman manual: openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
Jeroen Wiert Pluimers

tmux: unknown option -- AIni sepertinya hanya tersedia dalam versi terbaru.
xApple

Ini adalah metode yang saya gunakan, tetapi Anda tidak bisa lagi menggunakan "tmux detach". Anda perlu menggunakan pintasan <ctrl> b - d untuk menyimpan dan keluar dari sesi yang ada.
Jess

2
[ -z "$TMUX" ] && exec tmux new -As .ini yang saya gunakan di blog saya .bashrc.
ryenus

30

Ini akan memulai sesi baru jika lampiran memberikan kesalahan:

tmux attach || tmux new

Jadi alias akan melakukan pekerjaan:

tm="tmux attach || tmux new"

Anda bahkan dapat membuatnya lebih pendek dengan mengganti tmux attachuntuktmux a
Bruno Polaco

Meskipun ini fungsional, solusi Wesley Baugh menggunakan fungsionalitas built-in tmux untuk melakukan hal yang sama
Ari Patrick

fwiw ini sepertinya jawaban terbaik untuk versi yang lebih lama, sebelum -A diperkenalkan (mis. v1.6)
Christopher Peterson

3

Pertimbangkan untuk menambahkan yang berikut ke .bashrc

if [ -z "$TMUX" ]; then
    base_session='my_session'
    # Create a new session if it doesn't exist
    tmux has-session -t $base_session || tmux new-session -d -s $base_session
    # Are there any clients connected already?
    client_cnt=$(tmux list-clients | wc -l)
    if [ $client_cnt -ge 1 ]; then
        session_name=$base_session"-"$client_cnt
        tmux new-session -d -t $base_session -s $session_name
        tmux -2 attach-session -t $session_name \; set-option destroy-unattached
    else
        tmux -2 attach-session -t $base_session
    fi
fi

Anda dapat melihat penggunaan ini dalam file sumber daya ZSH saya di repo github saya


2

Untuk memperluas jawaban Wesley Baugh (yang merupakan sesi bersarang ganda untuk saya ketika digunakan dalam .bashrc saat masuk) dan menambahkan sedikit fleksibilitas karena saya sering menggunakan sudo -sserver (yang dengan patuh memuat .bashrc saya lagi dan sarang ganda), inilah apa yang saya miliki di .bashrc saya:

if [ -z "$TMUX" ] && [ ${UID} != 0 ]
then
    tmux new-session -A -s main
fi

Ini memeriksa untuk sesi tmux dan memastikan Anda tidak superuser sebelum membuat sesi baru atau melampirkan ke yang sudah ada yang bernama main.


1

Drew Frank menjawab ini di sini: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

Inilah skrip yang sekarang saya gunakan untuk ini (walaupun, saya telah beralih kembali ke layar karena masalah lain dengan tmux) /somewhere/on/your/path/ttmuxatau sebagai fungsi shell:

#!/bin/sh
# many thanks to Drew Frank: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r
(tmux ls | grep -vq attached && tmux -2 at) || tmux -2

The -2pilihan membuat tmux berasumsi 256 dukungan terminal warna, sehingga mereka mungkin tidak sesuai untuk situasi Anda.



1

Saya sedikit memperbaiki pada jawaban @SuperMagic. Saya meletakkan blok ini di bagian atas.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.