เมื่อออกจากเทอร์มินัลล่าสุดในเซสชั่น tmux มันสามารถสลับไปยังอีก?


12

เมื่อฉันออกจากเทอร์มินัลสุดท้ายในเซสชั่น tmux มันจะปิด tmux โดยอัตโนมัติและนำฉันกลับไปที่เทอร์มินัลหลัก เป็นไปได้หรือไม่ที่จะเปลี่ยน tmux ไปเป็นเซสชันอื่นที่ทำงานอยู่แล้วแทนที่จะปิด?

ฉันสร้างเซสชันที่มีชื่อใหม่สำหรับทุกงานที่ฉันทำงานเช่น TRxxx อีเมลเกา ฯลฯ และเมื่อฉันทำกับหนึ่งในนั้นฉันปิดเทอร์มินัลทั้งหมดโดยใช้ทางออกในทุก ๆ เมื่อคุณรัน exit ในเทอร์มินัลสุดท้ายของเซสชัน tmux จะนำคุณกลับไปที่เทอร์มินัลหลัก แต่เป็นไปได้ไหมที่จะเปลี่ยนเป็นเซสชันเปิดอื่น ๆ แทนดังนั้นฉันไม่ต้องติดตั้งใหม่

คำถามนี้คล้ายกับ " Kill a tmux session และเลือกอีก tmux session " แต่ฉันต้องการปิดเทอร์มินัลด้วยวิธีที่ดีโดยใช้ exit แทนการฆ่าหน้าต่าง

คำตอบ:


2

ที่ใกล้เคียงที่สุดที่ฉันได้รับคือฟังก์ชั่น tmux ที่ฉันเขียน ผมปกติออกจากเปลือกโดยการกดปุ่มCtrl+ Dดังนั้นฉันโปรแกรมtmuxเพื่อออกและสลับการประชุมเมื่อกดปุ่ม+[PREFIX] Ctrl Dใส่สิ่งต่อไปนี้ในของคุณ.tmux.conf:

bind C-d run-shell "                                        \
    if [ #{session_windows} -eq 1 ] &&                      \
       [ #{window_panes}    -eq 1 ] &&                      \
       [ #{pane_current_command}  = 'bash' ]; then          \
        if [ \$(tmux list-sessions | wc -l) -ge 2 ]; then   \
            tmux switch-client -ln;                         \
        fi; tmux kill-session -t \"#S\";                    \
    else                                                    \
        tmux display-message \"Ignoring kill session...\";  \
    fi;                                                     \
    "

Hit [PREFIX] Ctrl+ Dและออกจากเซสชันปัจจุบันหาก (และเฉพาะในกรณีที่) ถือเชลล์หนึ่งเชลล์เท่านั้นซึ่งไม่ได้รันคำสั่งอื่น ๆ มันจะเปลี่ยนไปใช้เซสชันอื่นถ้าเป็นไปได้ ฉันใช้เปลือก bash ดังนั้นคุณอาจต้องเปลี่ยนเป็นสิ่งที่คุณใช้

ps: ในกรณีที่มันสำคัญฉันกำลังใช้ tmux 1.9a


29

ฉันเพิ่มนี้เพื่อของฉัน~/.tmux.conf:

set-option -g detach-on-destroy off

เมื่อฉันทำลายเชลล์สุดท้ายในเซสชั่นมันจะสลับไปยังเซสชั่นอื่นที่ใช้งานอยู่ เมื่อปิดเซสชันทั้งหมดแล้วให้tmuxออก


4
คำตอบที่ถูกต้องควรได้รับการอัปเดตเป็นอย่างนี้
cviejo

กรุณายื่นโปสเตอร์ของคำถาม
RichN

สิ่งสำคัญคือโปรดทราบว่า tmux ไม่ได้อัปเดตการตั้งค่านั้นเมื่อทำการถอดและติดตั้งซ้ำกับเซสชันที่มีอยู่ คุณต้องรีสตาร์ทเซิร์ฟเวอร์ tmux เพื่อให้มีผล
nyi

2

เพิ่มบรรทัดเหล่านี้ในของคุณ.bashrcและลอง:

if which tmux 2>&1 >/dev/null 
then
    # start a new session if not exist
    test -z ${TMUX} && tmux

    # when quitting tmux, try to attach to other session
    while test -z ${TMUX}; do
        tmux attach || break
    done
fi

1
เกือบเป็นสิ่งที่ฉันต้องการ แต่เป็นไปได้หรือไม่ที่จะเปลี่ยนเพื่อให้ทำงานได้ก็ต่อเมื่อฉันออกจากด้านใน tmux สคริปต์นี้จะแนบกับเซสชัน tmux ที่มีอยู่ทุกครั้งที่ฉันเปิดเทอร์มินัลใหม่ ฉันพยายามที่จะมีเซสชั่น tmux สำหรับสิ่งของในท้องถิ่นจากนั้นฉันเปิดเทอร์มินัลใหม่เมื่อ ssh: ไอเอ็นจีไปยังเครื่องอื่นที่ฉันจะมีเซสชั่น tmux แยกต่างหากเพื่อหลีกเลี่ยงการซ้อนกัน
David Holm

ไม่สคริปต์นี้จะเริ่มเซสชัน tmux ใหม่เมื่อใดก็ตามที่คุณเปิดเทอร์มินัลใหม่ไม่ได้เชื่อมต่อกับที่มีอยู่ คุณสามารถให้รายละเอียดเพิ่มเติมคุณหมายถึง "inside tmux" หรือไม่
cuonglm

1
สมมติว่าฉันมีเซสชั่น X และ Y ที่ Y เปิดเทอร์มินัลเดียวเท่านั้น ฉันรัน 'exit' ในเทอร์มินัลสุดท้ายใน Y ซึ่งจะทำให้เซสชันสิ้นสุด ในกรณีนี้ฉันต้องการให้ tmux เปลี่ยนไปใช้งานเซสชัน X แทนการยกเลิก แต่ฉันไม่ต้องการให้เซสชัน tmux แนบ / สร้างเมื่อใดก็ตามที่ฉันเรียกใช้เทอร์มินัลใหม่
David Holm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.