คัดลอกบัฟเฟอร์หน้าจอเลื่อน GNU ไปยังไฟล์ (ขยายสำเนาถาวร)


188

ฉันจะคัดลอกบัฟเฟอร์การเลื่อนหน้าจอของ GNU ไปยังไฟล์ได้อย่างง่ายดายได้อย่างไร คือรุ่นที่มีประสิทธิภาพมากขึ้นของคำสั่ง 'hardcopy' หรือไม่?

ในหน้าจอ GNU ฉันสามารถใช้ " Ctrl+ A Esc" เพื่อเข้าสู่ scrollback buffer ฉันสามารถทำเครื่องหมายบัฟเฟอร์ทั้งหมดและใช้ " Ctrl+ A Ctrl+ ]" เพื่อวางลงในบัฟเฟอร์Emacsดังนั้นจึงบันทึกลงในไฟล์

อย่างไรก็ตามเรื่องนี้น่าเบื่อ มีคำสั่งหน้าจอที่จะคัดลอกบัฟเฟอร์การเลื่อนไปยังไฟล์อย่างเช่น 'hardcopy' สำหรับส่วนที่มองเห็นของหน้าจอได้หรือไม่?

คำตอบ:


284

หากต้องการเขียนเนื้อหาทั้งหมดของบัฟเฟอร์การเลื่อนไปยังไฟล์ให้พิมพ์

Ctrl+ Aและ: เพื่อไปที่โหมดคำสั่งจากนั้น

hardcopy -h <filename>

ในรุ่นเก่าของscreenถ้าคุณเพียงแค่ทำมันก็เขียนไปยังแฟ้มhardcopy -h -hสิ่งนี้ได้รับการแก้ไขในเวอร์ชั่น 4.2.0 ดังนั้นให้hardcopy -hเขียนไปยังhardcopy.Nตำแหน่งที่Nเป็นหมายเลขหน้าต่างปัจจุบัน


1
โปรดทราบว่าไฟล์จะได้รับการบันทึกในไดเรกทอรีภายใน - อย่างน้อยก็ทำเพื่อฉัน ขอบคุณสำหรับคำตอบ btw!
Ritesh

2
@allrite: มันได้รับการบันทึกเป็น $ PWD (ถ้าคุณไม่ให้เต็มพา ธ ) จะไม่มีพฤติกรรมพิเศษ
Pushpendre

9
ใช่ แต่จะได้รับการบันทึกใน $ PWD ที่คุณเริ่มหน้าจอ ไม่ได้อยู่ใน $ PWD ของเซสชันหน้าจอ
seumasmac

7
โปรดทราบว่าหากคุณมีบัฟเฟอร์การเลื่อนยาวและไม่มากไฟล์ที่บันทึกอาจปรากฏว่างเปล่าเนื่องจากบรรทัดแรกมีหลายสิบหรือหลายร้อยบรรทัดและเนื้อหาจะอยู่ท้าย
เทอร์รี่บราวน์

3
หนึ่งทราบเพิ่มเติมเกี่ยวกับสถานที่ที่กระดาษที่ได้รับการบันทึกไว้: ถ้าคุณ cd ไปยังไดเรกทอรีและจากนั้นใช้เพื่อเชื่อมต่อไปยังเซสชั่นที่มีอยู่ในกระดาษไม่ได้รับการบันทึกไว้ในไดเรกทอรีที่ใช้งานอยู่ภายในหน้าจอหรือคนที่คุณอยู่ในก่อนที่จะใช้screen -r screen -rฉันคิดว่ามันจะถูกบันทึกลงในไดเรกทอรีที่คุณอยู่เมื่อคุณเริ่มเซสชันหน้าจอเป็นครั้งแรก คุณอาจสามารถเปลี่ยนแปลงสิ่งนี้ได้ด้วยคำสั่งhardcopydir
Matthias Fripp

25

กดCtrl+ A : bufferfile /tmp/somefile.txt ENTERจากนั้นกดCtrl+A >

สิ่งนี้จะเขียนเนื้อหาปัจจุบันของบัฟเฟอร์ไปยังไฟล์ที่มีชื่อ


ฉันลองสิ่งนี้และ "ctrl-a>" พูดว่า "ไม่มีอะไรเกิดขึ้น" ขั้นตอนแรกบอกว่า "Bufferfile ตอนนี้ '/tmp/foo.txt'" แต่ดูเหมือนจะไม่สร้างแม้แต่ไฟล์นั้น

1
แน่ใจหรือไม่ว่าคุณได้คัดลอกบางสิ่งบางอย่างลงในบัฟเฟอร์หน้าจอโดยใช้ Ctrl + A [? ดูเหมือนว่าบัฟเฟอร์ของคุณอาจว่างเปล่า - มันจะไม่คัดลอกบัฟเฟอร์ทั้งตัวเลื่อนเพียงส่วนที่คุณเลือกโดยใช้ Ctrl + A [
Roshan

2
อ่าฉันกำลังมองหาช็อตคัตเพื่อคัดลอกบัฟเฟอร์ทั้งหมดโดยไม่ใช้ ctrl-a [

12

TL; DR: ^A:writebuf <filename>

OP ดูเหมือนจะต้องการวิธีการใช้ส่วนที่เลือกของบัฟเฟอร์ที่คุณได้รับเมื่อทำ ^ A [การเลือกข้อความโดยใช้ช่องว่างเป็นจุดเริ่มต้นและสิ้นสุดจากนั้นแทนที่จะใช้ ^ A] เพื่อวางบันทึกส่วนที่เลือกไว้ ของบัฟเฟอร์ไปยังไฟล์

สิ่งนี้ได้ผล:

^A:writebuf <filename>

หมายเหตุ: หนึ่ง 'f' ใน writebuf


1
ไม่ไม่. OP ต้องการบันทึกบัฟเฟอร์ทั้งหมดไม่ใช่แค่ส่วนที่เลือก - OP

2
หนู! พลาดไม่ได้กับสิ่งนี้มาก
Kevin Mullet

4
โพสต์นี้ยังมีประโยชน์ ทำได้ดีมาก
Justin E

1
ฉันพบว่าเพื่อให้ทำงานบนหน้าจอรุ่น MacOSX ฉันต้องใช้เส้นทางการยกเลิก (เช่น: /Users/user1/path/to/file.txt)
jhrf

6

พยายามhardcopy -hรวมบัฟเฟอร์ทั้งหมด


2
นี่เป็นเพียงการทำสำเนาในไฟล์ ~ / -h

2
@barrycarter: อาจมีการเปลี่ยนแปลงในรุ่นที่ใหม่กว่า ในฐานะที่เป็นหน้าจอ 4.03.01 hardcopy -hเขียนไปhardcopy.Nที่ไหนNเป็นหมายเลขหน้าต่างปัจจุบัน
Keith Thompson

4

สิ่งนี้ใช้ได้กับฉัน:

เข้าสู่โหมดแก้ไข ( ~) และพิมพ์:

:hardcopy -h buff_file

มันสร้างไฟล์ขนาดใหญ่ซึ่ง 98% นั้นว่างเปล่า แต่บันทึกของฉันมีอยู่เต็ม 2%


-2

Ctrl+ A, :และออกคำสั่ง 'log on'

หรือตั้งเป็นค่าเริ่มต้นในไฟล์. screenrcของคุณเป็น 'deflog on'


2
ฉันคิดว่านี่เพิ่งเริ่มบันทึกทุกอย่างหลังจากที่ฉันเรียกใช้คำสั่งนั้น ฉันไม่ต้องการบันทึกทุกอย่าง (เช่น verbose) ฉันต้องการจับบัฟเฟอร์การเลื่อนกลับเป็นไฟล์

-3

Do Ctrl+ ,AH

ที่จะช่วยประหยัดหน้าจอปัจจุบันเป็นไฟล์คัดลอกยากเช่น hardcopy.0 สำหรับหน้าจอ 0. มันน่าจะเป็นวิธีที่รวดเร็วกว่าจะCtrl+ A, :และพิมพ์กระดาษคำสั่ง


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