วิธีแยกเซสชั่น tmux ที่มีอยู่แล้วใน tmux แล้ว?


118

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

ตอนนี้ฉันต้องการแยกเซสชั่น tmux ระยะไกลฉันได้ลองแล้ว

C-b d

แต่มันแยกเซสชั่น tmux ท้องถิ่นของฉันมากกว่าหนึ่งระยะไกล

ฉันจะแยก sesstion tmux แบบรีโมตได้อย่างไร?

คำตอบ:


162
C-b C-b d

(สมมติว่าการผูกเริ่มต้น)

Cbแรกถูกตีความโดยtmuxในพื้นที่ของคุณ(เพราะเป็นครั้งแรกที่จะเห็นการกดแป้นทั้งหมดของคุณ) Cb ตัวที่สองคือคำสั่งที่ทำให้ tmux โลคัลของคุณส่งCbไปยังบานหน้าต่างที่แอ็คทีฟ นี้สร้างCbมาถึงที่ระยะไกลtmux dผ่านท้องถิ่นtmuxไม่เปลี่ยนแปลง; เมื่อไปถึงรีโมตtmuxจะทริกเกอร์detachคำสั่ง

  1. คุณพิมพ์Cb tmux
    โลคัลของคุณตีความว่าเป็นคีย์คำนำหน้า อะไรที่ถูกส่งไปยังกระบวนการทำงานภายใต้ท้องถิ่นtmux
  2. คุณพิมพ์Cb tmux
    โลคัลของคุณเชื่อมโยงกับคำสั่งแล้ว send-prefix
    1. tmuxโลคัลของคุณส่งCbไปยังกระบวนการที่รันอยู่ในบานหน้าต่างที่แอ็คทีฟ ( ssh )
    2. sshส่งต่อมัน (ผ่านsshdเป็นต้น) ไปยังกระบวนการที่ทำงานบนรีโมตปลายทาง ( tmuxระยะไกล) tmux แบบ
      รีโมตของคุณตีความว่าเป็นคีย์คำนำหน้า อะไรที่ถูกส่งไปยังกระบวนการทำงานภายใต้ระยะไกลtmux
  3. คุณพิมพ์d tmux
    โลคัลของคุณส่งผ่านตามปกติ (เนื่องจากCb ตัวที่สองเสร็จสิ้นการเรียงลำดับคีย์คำสั่งแบบเต็มสำหรับtmux แบบโลคัล) tmux แบบ รีโมตของคุณเชื่อมโยงกับ; มันแยกลูกค้าที่ใช้งานอยู่
    detach-client

นี่เหมือนกับเมื่อคุณต้องการส่งCbไปยังโปรแกรมใด ๆ ที่ทำงานภายในเซสชันtmux หากคุณต้องการส่งCbไปยังเชลล์ปกติของคุณ (เช่นเนื่องจากเชลล์ของคุณใช้การแก้ไขสไตล์ Emacs โดยที่Cbคือbackward-char(และคุณไม่ชอบการใช้ปุ่มลูกศร)) คุณจะต้องใช้Cb Cbเพื่อรับCbเดี่ยวไปยังเชลล์


8
หรือฉันเห็นการใช้C-a C-aข้ามไปยังหน้าต่างที่ใช้งานล่าสุดบ่อยครั้ง ภายใต้สถานการณ์เช่นนี้ให้พยายามC-a a dถอดออก ขอบคุณ!
mkelley33

2
หมายเหตุ : คำสั่งผสมที่ฉันพูดถึงข้างต้นจะใช้ได้เฉพาะเมื่อaคีย์ถูกผูกไว้แทนbใน tmux.conf ของผู้ใช้
mkelley33

tmux ด้านนอกของฉันใช้C-aกับตัวที่อยู่ภายในC-bและสามารถแยกออกจากตัวที่อยู่ภายในได้สิ่งเดียวที่เหมาะกับฉันคือC-a C-b-b dแต่ฉันไม่เข้าใจว่าทำไมฉันถึงต้องการตัวที่สองb
Guillem Cucurull

เพียงแค่ตัวเตือนเพื่ออนุญาตให้ผู้ใช้เปิดใช้งานตัวเลือกนี้หากไม่มี:การเชื่อมโยงคีย์เริ่มต้น: คุณสามารถเรียกใช้คำสั่งเพื่อรันคำสั่ง tmux แบบโต้ตอบและจากนั้นตั้งค่าการเชื่อมผ่านbind-key -n j send-prefixคำสั่ง ในตัวอย่างนี้ฉันต้องการผูกjเพื่อส่งคำนำหน้า มิฉะนั้นให้ใช้คำตอบของเดฟ: ใช้tmux detachคำสั่ง
nealmcb

46

อีกวิธีในการทำโดยไม่ต้องกังวลเกี่ยวกับการโยงคีย์ทำให้อินสแตนซ์ tmux ที่ถูกต้องคือการพิมพ์tmux detachในเซสชัน tmux แบบรีโมต


8

ฉันลองคำตอบแรกโดยไม่ประสบความสำเร็จ

ฉันสามารถรับผลลัพธ์ที่ต้องการโดยทำสิ่งต่อไปนี้:

tmux attach

ฉันเข้าสู่ tmux และเห็นเซสชันอื่น ๆ ยังคงเชื่อมต่ออยู่

ดังนั้นฉันจึงแยกเซสชั่นปัจจุบันของฉันเพื่อกลับไปที่เชลล์: Ctrl + b; d

จากนั้นฉันก็ออกสิ่งต่อไปนี้: tmux attach -d

สิ่งนี้บอกว่าจะแนบไปกับเซสชันเริ่มต้นและแยกเซสชันอื่น ๆ ทั้งหมดที่แนบอยู่ในปัจจุบัน ดู man page ภายใต้Clients and Sessions

attach-session [-dr] [-t target-session] (นามแฝง: แนบ) หากเรียกใช้จากภายนอก tmux ให้สร้างไคลเอนต์ใหม่ในเทอร์มินัลปัจจุบันและแนบกับเซสชันเป้าหมาย หากใช้จากภายในให้สลับไคลเอนต์ปัจจุบัน หากระบุ -d ไว้ไคลเอ็นต์อื่นใดที่เชื่อมต่อกับเซสชันจะถูกแยกออก -r หมายถึงไคลเอนต์เป็นแบบอ่านอย่างเดียว (เฉพาะคีย์ที่ผูกไว้กับคำสั่ง detach-client เท่านั้นที่มีผลกระทบใด ๆ )


0

หากคุณต้องการลองตัวเลือกอื่นทำตามขั้นตอนด้านล่าง

  1. ถอดเซสชั่น tmux Ctrl+b dปัจจุบันด้วย เพื่อให้คุณตอนนี้คุณไปที่พรอมต์บรรทัดคำสั่งของสถานีปกติ
  2. tmux lsทำ ค้นหาเซสชันที่แนบอยู่ในปัจจุบัน
  3. ดำเนินการคำสั่งนี้เพื่อแยกเซสชั่นที่แนบมาแล้ว tmux detach-client -s <attached_session_name>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.