tmux setara dengan "layar -R"?

10

The tmux attachperintah bertindak lebih seperti kombinasi screen -rdan screen -x- pertama trys untuk melampirkan ke yang paling baru terpisah sesi, dan kemudian jika tidak tersedia maka akan melampirkan ke sesi saat ini melekat. Saya ingin meniru perilaku screen -R: pertama-tama cobalah untuk melampirkan sesi terpisah, kemudian memulai sesi baru jika tidak ada sesi terpisah. Apa cara terbaik untuk mencapai ini di tmux?

Drew Frank
sumber

Jawaban:

12

Setelah berkonsultasi dengan penyihir IRC, saya yakin tidak ada perintah tmux tunggal yang memiliki perilaku ini. Untungnya, cukup mudah untuk ditiru menggunakan shell:

(tmux ls | grep -vq attached && tmux at) || tmux
Drew Frank
sumber
Suntingan kecil untuk memadamkan output "gagal terhubung ke server: Sambungan ditolak" jika Anda meluncurkan sesi baru:(tmux ls 2>/dev/null | grep -vq attached && tmux at) || tmux
l8nite
3

Terlepas dari apa yang tertulis di manual tmux:

             The target-session rules for attach-session are slightly
         adjusted: if tmux needs to select the most recently used session,
         it will prefer the most recently used unattached session.

Jawaban Drew tidak akan berfungsi dengan baik dalam situasi seperti:

0: 1 windows (created Wed Nov  7 23:51:08 2012) [177x47]
1: 1 windows (created Wed Nov  7 23:51:33 2012) [177x47] (attached)

tmux atakan melampirkan ke sesi terakhir (# 1) (meskipun sesi ini masih terpasang di tempat lain). Ini menghancurkan seluruh ide untuk menjalankan beberapa sesi tmux dan hanya menempel pada sesi yang terpisah (untuk menggunakan mosh + tmux + iterm2 untuk membuat terminal roaming yang sempurna).

Pendekatan lain adalah dengan memilih sesi yang tidak dilampirkan secara manual:

tmux ls | grep -vq attached && tmux at `tmux ls | grep -vm1 attached | cut -d: -f1`

pengguna1559834
sumber
Tangkapan yang bagus! Dokumentasi tidak sinkron dengan perilaku aktual. Saya membuat laporan bug untuk ini.
Drew Frank
Sebuah tambalan keluar yang memperbaiki ini, jadi pada rilis berikutnya ia akan berperilaku seperti yang diiklankan.
Drew Frank
Apakah tambalan dalam 1,8?
momeara
2

Saya cenderung hanya memiliki dua sesi tmux sekaligus, jadi saya melakukan sesuatu seperti ini di setiap jendela terminal.

jendela terminal 0:

tmux attach -t 0 || tmux new

jendela terminal 1:

tmux attach -t 1 || tmux new
Charles Witt
sumber
2

Ini yang terbaik bagi saya:

if [ -z "$TMUX" ]; then
     (tmux ls | grep -vq attached && tmux at -t `tmux ls | grep -vm1 attached | cut -d: -f1`) || tmux new
fi

-T diperlukan untuk melampirkan sesi yang tepat.

Tomberek
sumber
1

Bagaimana dengan

tmux attach || tmux new

atau sebagai gantinya hanya membuat file ~/.tmux.confjika tidak ada, dan tambahkan

new-session

untuk itu sehingga menciptakan sesi baru ketika tidak ada saat Anda menjalankan tmux attach.

Mungkin juga berguna untuk membuat tmuxalias tmux attach.

Tamara Wijsman
sumber
Proposal pertama akan dilampirkan ke sesi tmux saat ini terlampir (mirip dengan layar -x), yang merupakan sesuatu yang ingin saya hindari. Proposal kedua menunjukkan masalah yang sama dan juga memiliki konsekuensi yang tidak diinginkan dari membuat sesi tmux "ekstra" ketika saya menggunakan perintah tmux source-file untuk memuat ulang konfigurasi.
Drew Frank