Apakah ada tmux yang setara dengan "screen -D -R"

13

Saya ingin tahu apakah ada cara tmuxuntuk berperilaku seperti screen -D -Rsehingga saya bisa mengatakan, memiliki perintah sebagai perintah default di Putty.

screenSakelar ini akan memaksa lepas dari sesi layar yang ada untuk pengguna saya (bahkan jika itu masih aktif dan masuk di tempat lain) dan pasang kembali ke sesi saat ini. Juga, dalam hal tidak ada sesi layar, itu akan membuat yang baru.

Saya suka tmux dan dapat melihat manfaat yang jelas di layar, tetapi keberadaan fitur ini akan sangat membantu.

tmux attach sepertinya tidak membuat sesi baru jika tidak ada.

Halaman manual untuk tmux mengatakan:

Jika tidak ada server yang dimulai, sesi-melampirkan (melampirkan) akan mencoba untuk memulainya; ini akan gagal kecuali sesi dibuat di file konfigurasi.

Apa arti bagian dalam huruf tebal? (Saya tidak dapat menemukan contoh membuat sesi di file conf).

Geeb
sumber
Dari halaman manual: " File konfigurasi adalah sekumpulan tmuxperintah yang dieksekusi secara berurutan ketika server pertama kali dimulai. " - Anda sebenarnya dapat memiliki attachatau new-sessionsebagai baris di file .tmux.conf.
sr_
@sr_ Nah, ketika server pertama kali dimulai new-sessionakan terjadi saja ...
Chris Down
Baru saja menemukan pertanyaan (tertutup) ini di SO. Pertanyaan yang sama dengan jawaban yang serupa. stackoverflow.com/q/3432536/168034
phunehehe

Jawaban:

15

Iya:

$ tmux attach -d || tmux new

-ddiperlukan untuk berperilaku seperti screen -D, yaitu melepaskan semua orang lain.

Terhubung dengan ssh, lalu lampirkan atau buat bisa seperti:

$ cat bin/stmux
#!/bin/sh
exec ssh -t $@ 'tmux attach -d || tmux new'

$ stmux my.remote.box
mmoya
sumber
1
Ya - ini tampaknya menjadi cara paling efektif untuk mencapai apa yang saya minta. Demikian juga, saya tidak menyetujui new-sessiondalam file konfigurasi jika Anda ingin mengeditnya dan memuat ulang selama sesi tmux.
Geeb
4

Untuk membuat tmux attachsesi baru ketika tidak ada, gunakan opsi new-sessiondi file konfigurasi tmux. Buat file ~/.tmux.confjika tidak ada, dan tambahkan

new-session

untuk itu. Juga, saya alias tmuxuntuk tmux attach:)

phhehehe
sumber
1
Saya lebih suka tidak new-sessionmasuk ~/.tmux.confkarena jika saya memuat ulang konfigurasi menggunakan perintah source-file ~/.tmux.conf(lihat ini ) sesi baru akan diluncurkan. Ya, saya bisa membunuhnya dan kemudian melampirkan yang sebelumnya tapi itu sedikit mengganggu.
mmoya
3

Anda dapat meniru ini dengan fungsi shell, ini harus bekerja untuk setiap shell yang sesuai dengan POSIX:

tmux() {
    if [ "$#" -ge 1 ] && [ "$1" = -z ]; then
        shift
        command tmux detach 2>/dev/null
        command tmux attach "$@" || command tmux new-session "$@"
    else
        command tmux "$@"
    fi
}

Sekarang jika Anda meluncurkannya sebagai tmux -z, itu harus melakukan tindakan yang Anda cari.

Chris Down
sumber
2

ini bekerja sedikit lebih baik untuk saya:

tmux new-session -AD -s <session-name>
ZA
sumber
1

Saya menemukan ini bekerja paling baik untuk saya di .bashrc

if [[ -z $TMUX ]]; then
  tmux attach-session || tmux new-session
fi
pengguna2451432
sumber
Bagaimana hal itu menjelaskan bagian tebal pada OP?
Anthon
0

Jika Anda menggunakan ini di dalam file .shrc atau mirip dengan execsaya sarankan

if tmux ls
  exec tmux attach
else
  exec tmux
fi
Aaron J Lang
sumber