วิธีเริ่มต้น tmux พร้อมกับแนบหากมีเซสชันอยู่


92

ถ้าฉันใช้

tmux attach

ฉันสามารถแนบกับเซสชันที่กำลังทำงานอยู่ แต่หากไม่มีเซสชันที่ทำงานอยู่ฉันจะได้รับข้อผิดพลาดเท่านั้น

no sessions

ฉันจะเริ่มเซสชันใหม่โดยอัตโนมัติได้อย่างไรหากไม่มีการเรียกใช้ สิ่งที่ต้องการ

tmux attach-or-create-new-session

คำตอบ:


51

คำตอบนั้นง่ายกว่ามาก ใส่สิ่งนี้ลงใน~/.tmux.confไฟล์ของคุณ:

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

หากคุณเรียกใช้tmux attachและมีเซสชันเซสชันนั้นจะแนบกับเซสชันนั้น (ไม่ว่าจะแนบมาหรือไม่ก็ตาม) หากไม่มีเซสชันอยู่แล้วระบบจะสร้างเซสชันให้คุณ


11
นี้เป็นเคล็ดลับเรียบร้อย แต่มีข้อแม้ถ้าtmuxถูกเรียกโดยไม่ขัดแย้งก็จะสร้างเซสชันใหม่และสร้างเซสชั่นที่สองเป็นเร็ว ๆ ~/.tmux.confนี้ก็มาถึงบรรทัดนี้ในของคุณ คุณสามารถดูปัญหานี้ได้โดยการดำเนินการtmux lsหลังจากสร้างเซสชันแรก ในทางปฏิบัติหลังจากที่คุณใส่ในไฟล์ของคุณคุณจะไม่สามารถเรียกร้องtmuxกับการขัดแย้งไม่มีอีกต่อไป
บรูโน่ Polaco

4
ดังนั้นคุณจะต้องเพิ่มชื่อแทนalias tmux="tmux attach"เพื่อป้องกันปัญหานี้
rubo77

@BrunoPolaco: caveat ขนาดใหญ่ที่มีเซสชั่น tmux ว่างเปล่าเป็นพิเศษทำงานอยู่ตลอดเวลา (นอกเหนือจากที่มันดูไม่เป็นระเบียบในรายการงาน)?
rubo77

ทรัพยากร @ rubo77 บางคนมีเครื่องมือไม่กี่เริ่มต้น, หน้าต่างบานหน้าต่าง ฯลฯ tmuxสร้างขึ้นเมื่อพวกเขาเปิดตัว
rovr138

129

หากการตั้งชื่อเซสชันของคุณไม่เป็นไรคุณสามารถทำได้ง่ายด้วยnew-sessionคำสั่ง:

tmux new-session -A -s main

โดยที่mainเป็นชื่อเซสชันที่จะแนบหรือสร้างหากจำเป็น

จากman tmux:

การ-Aตั้งค่าสถานะทำให้new-sessionเหมือนattach-sessionว่ามีชื่อเซสชันอยู่แล้ว; ในกรณีนี้-Dจะทำงานเหมือนการ-dattach-session

โปรดทราบว่า-Aตัวเลือกที่เป็นที่รู้จักในรุ่น tmux 1.8จาก 26 มีนาคม 2013tmux attach || tmuxสำหรับรุ่นก่อนหน้านี้ใช้


10
+1 สำหรับการใช้งานฟังก์ชั่นในตัวและจัดหาตัวอย่างเอกสาร Man
Ari Patrick

1
ในรายการนามแฝงของฉัน: alias "tmux-attach-or-create-main-session=tmux new-session -A -s main". ขอบคุณสำหรับทิป! หน้าคู่มือ: openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1
Jeroen Wiert Pluimers

tmux: unknown option -- Aดูเหมือนว่าจะมีเฉพาะในเวอร์ชันล่าสุดเท่านั้น
xApple

นี่เป็นวิธีที่ฉันใช้ แต่คุณไม่สามารถใช้ "tmux detach" ได้อีกต่อไป คุณต้องใช้ทางลัด <ctrl> b - d เพื่อบันทึกและออกจากเซสชันที่มีอยู่
Jess

2
[ -z "$TMUX" ] && exec tmux new -As ..bashrcนี่คือสิ่งที่ผมใช้ในของฉัน
ryenus

30

นี่จะเป็นการเริ่มเซสชันใหม่หากสิ่งที่แนบมามีข้อผิดพลาด:

tmux attach || tmux new

ดังนั้นนามแฝงจะทำงาน:

tm="tmux attach || tmux new"

คุณสามารถทำให้สั้นลงโดยเปลี่ยนtmux attachเป็นtmux a
Bruno Polaco

ขณะนี้ใช้งานได้โซลูชันของ Wesley Baugh ใช้ฟังก์ชั่นในตัวของ tmux เพื่อทำสิ่งเดียวกัน
Ari Patrick

FWIW นี้จะดูเหมือนเป็นคำตอบที่ดีที่สุดสำหรับรุ่นเก่าก่อนที่จะได้รับการแนะนำ -A (เช่น v1.6)
คริสปีเตอร์สัน

3

พิจารณาเพิ่มสิ่งต่อไปนี้ในของคุณ .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

คุณสามารถเห็นการใช้งานของฉันนี้ในไฟล์ทรัพยากร ZSH ของฉันที่ repo github ของฉัน


2

เพื่อขยายคำตอบของ Wesley Baugh (ซึ่งเป็นเซสชันซ้อนสองชั้นสำหรับฉันเมื่อใช้ใน. bashrc ในการเข้าสู่ระบบ) และเพิ่มความยืดหยุ่นเล็กน้อยเนื่องจากฉันมักจะใช้sudo -sกับเซิร์ฟเวอร์ (ซึ่งจะโหลดหน้าที่. bashrc ของฉันอีกครั้ง สิ่งที่ฉันมีใน. bashrc ของฉัน:

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

นี้จะตรวจสอบสำหรับช่วง tmux และทำให้แน่ใจว่าคุณจะไม่ superuser mainก่อนที่จะสร้างเซสชันใหม่หรือติดกับที่มีอยู่หนึ่งชื่อ


1

Drew Frank ตอบคำถามนี้ที่นี่: https://superuser.com/questions/487363/tmux-equivalent-of-screen-r

นี่คือสคริปต์ที่ฉันใช้ตอนนี้ (แต่ฉันกลับไปที่หน้าจอเนื่องจากปัญหาอื่นกับ tmux) /somewhere/on/your/path/ttmuxหรือเป็นฟังก์ชันเชลล์:

#!/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

-2ตัวเลือกให้ tmux สมมติ 256 สนับสนุนขั้วสีดังนั้นเหล่านั้นอาจจะไม่เหมาะสมกับสถานการณ์ของคุณ



1

ฉันปรับปรุง @SuperMagic ให้ตอบหน่อย ฉันใส่บล็อกนี้ที่ด้านบนของฉัน.zshrc

if [[ $TMUX = "" ]]; then
  # try to reattach sessions
  tmux ls | grep -vq attached && TMUXARG="attach-session -d"
  exec eval "tmux -2 $TMUXARG"
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.