ฉันสามารถเห็นสิ่งที่เกิดขึ้นในเซสชั่น tmux โดยไม่ต้องแนบมันได้หรือไม่


16

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

มีวิธีใดที่จะเห็นภาพรวมคร่าวๆของสิ่งที่เกิดขึ้นในเซสชั่นโดยไม่ต้องแนบอย่างเต็มที่? ฉันกำลังมองหาบางสิ่งบางอย่างเช่นในทางทฤษฎีtailในเซสชั่นเพื่อรับบิตสุดท้ายของการส่งออก (แต่ถ้าฉันสามารถหลีกเลี่ยงการสร้างไฟล์อื่นที่มีสำเนาของเอาท์พุทดีกว่า)

อาจจะติดและถอดมันทันทีก็สามารถใช้ได้เช่นกัน ฉันพยายามบันทึกการกดแป้นบางทีคำสั่งดังกล่าวอาจถูกดำเนินการจากระยะไกล
เช่นssh root@server tmux --tail?

คำตอบ:


17

ฉันคิดว่าcapture-paneอาจเหมาะสมกับความต้องการของคุณ:

tmux capture-pane -pt "$target-pane"

(ดู“ เป้าหมายบานหน้าต่าง” ในหน้า man สำหรับวิธีการระบุบานหน้าต่าง)

โดยค่าเริ่มต้นคำสั่งนั้นจะถ่ายโอนเนื้อหาปัจจุบันของบานหน้าต่างที่ระบุ คุณสามารถระบุช่วงของเส้นโดยใช้-Sและ-Eตัวเลือก (หมายเลขเริ่มต้นและสิ้นสุด): บรรทัดแรกคือ 0 และจำนวนลบหมายถึงบรรทัดจากประวัติ“ เลื่อนกลับ” ของบานหน้าต่าง ดังนั้นการเพิ่ม-S -10จะทำให้คุณได้รับประวัติศาสตร์สิบบรรทัดล่าสุดพร้อมเนื้อหาปัจจุบันของบานหน้าต่าง

tmux capture-pane -pt "$target-pane" -S -10

-pตัวเลือกที่ถูกเพิ่มเข้ามาใน 1.8 หากคุณใช้เวอร์ชั่นก่อนหน้าคุณสามารถทำได้ดังนี้:

tmux capture-pane -t "$target_pane" \; save-buffer - \; delete-buffer

แต่ระวังอัฒภาคเหล่านั้นหากคุณกำลังออกคำสั่งนี้ผ่านทางsshเนื่องจากเชลล์ระยะไกลจะเพิ่มระดับการตีความเชลล์เพิ่มเติม (เซมิโคลอนต้องถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังคำสั่งtmuxสุดท้ายพวกเขาจะต้องไม่ถูกตีความโดยทั้งในท้องถิ่นหรือระยะไกล เปลือก).


1
คุณเป็นเจ้าของแท็กนี้จริงๆ ... คำตอบที่ดี (ตามปกติ)
jasonwryan

หนึ่งยังสามารถเพิ่ม-eสำหรับการหลบหนี ANSI (สีและอื่น ๆ ) นั่นทำให้จำได้ดี-pet
แกะที่บินได้

1

ไม่ได้จริงๆ วิธีการหนึ่งที่ควรคำนึงถึงคือการเริ่มต้นกระบวนการทำงานที่ยาวนานของคุณ ( $lrp) จากนั้นเป็นระยะโดยไม่มีการเชื่อมต่ออีกครั้งlist-windowsเพื่อให้ทำงานในเซสชันที่เกี่ยวข้อง

เมื่อถึงจุดหนึ่งชื่อของหน้าต่าง tmux ที่มี $ lrp จะเปลี่ยนกลับไปเป็นค่าเริ่มต้นโดยทั่วไปคือเชลล์ของคุณและคุณจะเห็นว่า $ lrp เสร็จสิ้นแล้ว

┌─[Veles ~]
└─╼ tmux list-windows -t 0
0: App1  (1 panes) [142x51] [layout b27d,142x51,0,0,0] @0
1: SSH  (1 panes) [142x51] [layout b27e,142x51,0,0,1] @1
2: IRC  (1 panes) [142x51] [layout b27f,142x51,0,0,2] @2
3: Shell- (1 panes) [142x51] [layout b280,142x51,0,0,3] @3
4: $lrp* (1 panes) [142x51] [layout b281,142x51,0,0,4] @4 (active)
┌─[Veles ~]
└─╼ tmux list-windows -t 0
0: App1  (1 panes) [142x51] [layout b27d,142x51,0,0,0] @0
1: SSH  (1 panes) [142x51] [layout b27e,142x51,0,0,1] @1
2: IRC  (1 panes) [142x51] [layout b27f,142x51,0,0,2] @2
3: Shell- (1 panes) [142x51] [layout b280,142x51,0,0,3] @3
4: bash* (1 panes) [142x51] [layout b281,142x51,0,0,4] @4 (active)

ความคิดที่ดี. ฉันยังคงสับสนเกี่ยวกับ$lrpว่า - เป็นตัวแปรที่คุณพูดถึง? คุณสามารถยกตัวอย่างว่าจะใช้อย่างไร? ไม่เห็น$lrpรายการในman tmux
cwd

@cwd นั่นเป็นเพียงตัวยึดตำแหน่งสำหรับกระบวนการของคุณ (พูดrsyncหรืออะไรก็ตาม) ... :)
jasonwryan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.