ฉันสามารถบันทึกเอาต์พุตจากคำสั่งเทอร์มินัลก่อนหน้าโดยใช้คีย์บอร์ดเท่านั้นได้หรือไม่


12

ฉันเพิ่งใช้เวลาสองชั่วโมงสุดท้ายในการรันddคำสั่ง(หรือภาพสถานการณ์ "ยากที่จะทำซ้ำ" ที่คล้ายกัน)จากซีดีสดโดยไม่ต้องใช้ GUI สิ่งที่ฉันมีก็คือ "multi-window" ( CTRL+ALT+F#) เทอร์มินัล Bash ที่ไว้ใจได้

อนิจจาในระหว่างการออกคำสั่งddข้อความข้อผิดพลาดที่น่ารังเกียจและข้อมูลเพิ่มเติมอีกเล็กน้อยที่ฉันต้องการเก็บไว้ ฉันเสียบไดรฟ์ USB ซึ่งฉันสามารถเขียนข้อมูลได้ แต่ฉันจะบันทึกผลลัพธ์ก่อนหน้าเป็นไฟล์ข้อความหลังจากที่คำสั่งรันไปแล้วได้อย่างไร

ถ้านี่เป็นเทอร์มินัลอีมูเลเตอร์ใน GUI ที่ดีฉันจะใช้เมาส์เพื่อเลือกข้อความคัดลอกและวางลงในเอกสาร และถ้าฉันรู้ว่าคำสั่งจะทำให้เกิดข้อผิดพลาดฉันจะส่งไปยังไฟล์ที่จะเริ่มต้นด้วยแต่ทว่าเอาท์พุทเพิ่มเติมมาเป็นเรื่องน่าประหลาดใจ

ฉันจะบันทึกเอาต์พุตข้อความจากคำสั่งก่อนหน้าของฉันไปยังไฟล์โดยไม่รันคำสั่งใหม่ได้อย่างไร? เป็นไปได้ไหม


ฉันค้นหาวิธีการเลือกข้อความบนหน้าจอ แต่จนถึงตอนนี้ฉันแค่ค้นหาวิธีการทำสิ่งนี้โดยใช้ข้อความที่คุณป้อนในพรอมต์
IQAndreas

คุณเคยลองใช้การเปลี่ยนเส้นทางออกหรือไม่?
eyoung100

2
@ eyoung100 นั่นเป็นคำอื่นสำหรับ "piping" หรือไม่? dd if=/dev/sda of=/backups/sda.img > result.txtในฐานะที่เป็น ถ้าเป็นเช่นนั้นปัญหาคือฉันรันddคำสั่งแล้ว ค่าใช้จ่ายทั้งหมดฉันต้องการหลีกเลี่ยงการรันคำสั่งอีกครั้งซึ่งในบางสถานการณ์เป็นไปไม่ได้
IQAndreas

2
สมมติว่านี้เป็นลินุกซ์: ติดตั้งแกลลอนต่อนาที (เริ่มถ้าจำเป็นเช่นservice start gpm) กวาดภูมิภาคออกโดยกดปุ่มซ้ายของเมาส์ค้างไว้ พิมพ์cat > outputfileและคลิกที่ปุ่มเมาส์ขวาเพื่อวางพื้นที่ที่คุณเลือก
Mark Plotnick

1
หากวัตถุประสงค์เพียงเพื่อ "เก็บ ... [ข้อมูล]" เป็นทางเลือกสุดท้ายคือการจับกล้องและถ่ายรูปหน้าจอ (และในทางทฤษฎีแล้วคุณสามารถเรียกใช้ OCR ได้)
Scott

คำตอบ:


15

เคอร์เนล linux ควรเก็บบันทึกบนหน้าจอสำหรับ vts ของคุณใน/dev/vcsa*[ttynum]อุปกรณ์ที่เกี่ยวข้อง

มันเป็นเหตุผลที่ทำงานต่อไปนี้:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2

... ที่พิมพ์ ...

hey       

/dev/vcsa[ttynum]อุปกรณ์ที่เกี่ยวข้องจะเก็บเวอร์ชันที่เข้ารหัสของข้อความที่จัดรูปแบบบนหน้าจอในขณะที่/dev/vcs[ttynum]จะเป็นการถ่ายโอนข้อมูลแบบธรรมดา vcsa[ttynum]อุปกรณ์จะเข้ารหัสคู่ของไบต์ซึ่งอธิบายแต่ละถ่านบนหน้าจอและคุณลักษณะของมันเช่นเดียวกับสตริงที่หัวของหน้าแต่ละตรรกะที่ระบุ TTY อ้างอิงของเส้นคอลัมน์นับ

@kasperd ชี้ให้เห็นว่าฉันผิดไปก่อนโดยสมมติว่า\aBEL ได้รับการเข้ารหัสระหว่างตัวละครทุกตัวในความเป็นจริง: การผสมสีเริ่มต้นเกิดขึ้นตรงกับตัวละครระฆัง

สำหรับวัตถุประสงค์ของคุณโดยใช้/dev/vcs[ttynum]อาจจะง่ายที่สุด นี่คือlook ที่แตกต่าง:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2 |
sed -n l

... พิมพ์ ...

hey       $

...และ...

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcsa2 |
sed -n l

... พิมพ์ ...

0\200\000\004h\ae\ay\a$

1
vcsaไม่ใส่อักขระเดียวกันระหว่างตัวละครทั้งหมด มันให้คู่ไบต์ที่บอกคุณว่าตัวละครตัวใดที่อยู่บนหน้าจอและสีที่มี การผสมสีเริ่มต้นเกิดขึ้นตรงกับตัวละครระฆัง
kasperd

@kasperd - ขอบคุณ มันจะดีกว่า
mikeserv

มันดีกว่า. 👍
kasperd

2

ไปที่ (/ เข้าสู่ระบบ) เทอร์มินัลอื่นแล้วเรียกใช้sudo screendump N > screenoutput.txtโดยที่Nจำนวนเทอร์มินัลที่คุณต้องการ

ไม่มีงานในมือฉันกลัว หากคอนโซลเสมือนเหล่านั้นเก็บไว้ฉันไม่เคยเห็นเลย แต่มันทำให้ทุกสิ่งที่คุณเห็นบนเทอร์มินัลนั้น


ถ้ามันไม่ทำงานก็อาจเป็นเพราะมันคว้าได้จาก/dev/vcsa*[1-9]*- (ซึ่งเป็นสิ่งที่ผมจะคาดเดา superuser สิทธิ์ที่มีการ) คอนโซลลินุกซ์สนับสนุน backlog สำหรับซีรีย์ 3. * ส่วนใหญ่เช่นกันฉันคิดว่า ฉันไม่แน่ใจว่าจะคว้ามันได้อย่างไร(เทียบกับการใช้/dev/vcsa*[1-9]*อุปกรณ์)แต่อาจมีวิธี
mikeserv

เป็นการดีกว่าที่จะไม่เปลี่ยนไปใช้คอนโซลอื่นเนื่องจากการสลับลบงานในมือค้างไว้คงเฉพาะสิ่งที่มองเห็นบนหน้าจอในปัจจุบัน
Gilles 'ดังนั้นหยุดความชั่วร้าย'

@mikeserv ใช่ ดีหน้าคนที่ดูเหมือนว่าจะบอกว่ามันใช้ทั้งสอง และ/dev/vcs$i /dev/vcsa$iมันให้ผลลัพธ์ที่อ่านได้แม้ว่า ;-)
The Sidhekin

@Gilles อาดังนั้นมีงานในมือ? แต่screendumpไม่เข้าใจเลยแม้ว่าฉันจะอยู่ในคอนโซลเดียวกันก็ตาม
Sidhekin

1
คุณสามารถดู scrollback โดยพิมพ์ Shift-PageUp หนึ่งครั้งขึ้นไป ฉันไม่รู้วิธีการดักข้อความใน scrollback นอกเหนือจากการใช้เมาส์ผ่าน gpm
Mark Plotnick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.