ฉันสามารถใช้คำสั่งใดในการรีเซ็ตและล้างข้อมูลเทอร์มินัล


64

ฉันได้ใช้คำสั่ง:

reset

เพื่อล้างเทอร์มินัลของฉัน แม้ว่าฉันค่อนข้างแน่ใจว่านี่ไม่ใช่สิ่งที่ฉันควรทำ รีเซ็ตตามชื่อที่แนะนำรีเซ็ตเทอร์มินัลทั้งหมดของคุณ (เปลี่ยนสิ่งต่างๆมากมาย) นี่คือสิ่งที่ฉันต้องการ:

clearฉันเป็นพื้นต้องการที่จะใช้คำสั่ง อย่างไรก็ตามหากคุณล้างแล้วเลื่อนขึ้นคุณยังคงได้รับสิ่งต่าง ๆ จากก่อนหน้านี้ โดยทั่วไปแล้วนี่ไม่ใช่ปัญหา แต่ฉันกำลังดูบันทึกขั้นต้นที่มีความยาวและฉันต้องการตรวจสอบให้แน่ใจว่าฉันเพิ่งดูล่าสุด ฉันรู้ว่าฉันสามารถใช้moreหรืออะไรแบบนั้น แต่ฉันชอบวิธีนี้


ดูเหมือนจะมีความสับสนมากมายเกี่ยวกับสิ่งที่ถูกถามที่นี่ คุณสามารถอธิบายคำถามได้ทั้งหมดหรือไม่ คุณพยายามทำสิ่งใดให้สำเร็จการล้างบัฟเฟอร์การเลื่อนเทอร์มินัลของคุณ (ถ้าเป็นเช่นนั้นคุณกำลังใช้แอปพลิเคชั่นเครื่องเทอร์มินัลอะไรอยู่)
quack quixote

1
Ctrl-L จะล้างหน้าจอใน bash (ในโหมด emacs ซึ่งเป็นค่าเริ่มต้น) ซึ่งคล้ายกับการใช้งานโปรแกรมล้าง

เพิ่งทดสอบสิ่งนี้ใน bash terminal ใน IntelliJ IDE ทำงานได้ดีและล้าง scrollback ซึ่งเป็นสิ่งที่ฉันต้องการ ขอบคุณ
Ian Lewis

ฉันรู้ว่านี้ได้รับการตอบรับที่จะตาย clear && printf '\033[3J'แต่ผมคิดว่าสิ่งที่คุณต้องการคือ ไม่มีการรีเซ็ตเทอร์มินัลเพียงแค่ล้างข้อความบนหน้าจอ ดูโพสต์นี้: superuser.com/questions/555554/…
jwd

คำตอบ:


57

buffer scrollback ไม่ใช่คุณสมบัติของ bash แต่เป็นโปรแกรมเทอร์มินัล คุณไม่ได้พูดอะไรเทอร์มินัลที่คุณใช้

หากคุณใช้ xterm คุณอาจสามารถเคลียร์บรรทัดที่บันทึกไว้โดย echoing ESC-c ไปยังเทอร์มินัล

สิ่งนี้อาจหรือไม่สามารถทำงานกับโปรแกรมเทอร์มินัลใด ๆ ที่คุณใช้งานอยู่

บน linux สิ่งนี้อาจใช้งานได้:

echo -e '\0033\0143'

ใน FreeBSD echo ไม่ยอมรับ -e ดังนั้นคุณสามารถลอง:

printf '\033\143'

ฉันใช้ xterm อย่างไรก็ตามฉันไม่เข้าใจว่าคุณหมายถึงอะไร ฉันควรพิมพ์ตามตัวอักษรecho ESC-c?
sixtyfootersdude

2
@sixtyfootersdude: ESCไม่มีไม่ได้เป็นตัวอักษร อ่านบทความ "หนีตัวอักษร" และ "การควบคุมตัวละคร" ในวิกิพีเดีย - ESCมักจะถูกใช้เพื่อแสดงอักขระ ASCII 0x1b ซึ่งคุณสามารถใส่ได้โดยการกดตามด้วย^V Esc
grawity

1
คุณไม่ควร หากโซลูชันของคุณเกี่ยวข้องกับการเขียนลำดับ escape เทอร์มินัล raw คุณควรพิจารณาโซลูชันอีกครั้ง ฉันจะใช้ "น้อยลง" แทนแมว หากคุณต้องการเรียนรู้เกี่ยวกับ "ลำดับการหลบหนีจากสถานี" Google สามารถช่วยคุณได้
Craig

2
@HaraldNordgren มันดีกว่าที่จะใช้ printf มาตรฐานมากกว่า echo -e
บุคคลที่ดี

3
ทำไม\0143แทนc?
ruakh

51

ใช้เครื่องมือที่เหมาะสมสำหรับแต่ละงาน:

  • ใช้clearเพื่อล้างหน้าต่างเทอร์มินัล

  • ใช้resetเพื่อรีเซ็ตเทอร์มินัลของคุณเมื่อมันเกิดความสับสนโดยลำดับการควบคุม

  • ใช้catเฉพาะเมื่อคุณต้องการที่จะสตรีมมากทั้งข้อมูลจากสถานที่หนึ่งไปยังอีกอย่างต่อเนื่อง

  • ใช้โปรแกรมวิทยุติดตามตัวเช่นlessหรือmostเพื่อดูหน้าผลลัพธ์

  • ใช้tail -f /var/log/foo.log /var/log/bar.logเพื่อดูไฟล์บันทึกต่างๆ

    • ด้วย GNU tailที่-Fตัวเลือกที่ดีกว่าเพราะมันสามารถดำเนินต่อไปแม้ในขณะที่ไฟล์ไฟล์ใหม่จะปรากฏขึ้นในสถานที่ที่เป็นเรื่องธรรมดาสำหรับล็อกไฟล์

14
นี่ไม่ได้ตอบคำถามของฉัน
sixtyfootersdude

7
ใช่มันทำ อย่าใช้ไฟล์ cat เพื่ออ่านไฟล์ cat เพื่อทำการต่อไฟล์ ใช้ไฟล์ที่น้อยกว่าหรือมากกว่าในการอ่านไฟล์ - จากนั้นคุณไม่มีปัญหาเดียวกัน
Rich Bradshaw

ค้นหา "การใช้แมวที่ไร้ประโยชน์"
galois

มีหลายคนที่ไม่เห็นด้วยกับการใช้catในการอ่านอะไร แต่สำหรับไฟล์ขนาดเล็กจริง ๆ แล้วมันทำให้ความรู้สึกมากกับพวกเขามากกว่าที่จะใช้cat lessเมื่อไฟล์ถูกเททิ้งไปที่เทอร์มินัลคุณสามารถดู / เลื่อนกลับไปที่ไฟล์ได้บ่อยเท่าที่คุณต้องการแทนที่จะต้องเลิกlessก่อนที่คุณจะทำสิ่งอื่น
GKFX

22

เพียงเพื่อให้คำตอบทางเทคนิค: resetเริ่มต้นใหม่เทอร์มินัลราวกับว่ามันถูกเปิดจากรอยขีดข่วน stty saneจะทำหน้าที่เหมือนกันมากมาย (โดยไม่ต้องรีเซ็ต) นี่คือสิ่งเดียวกับ^L(Ctrl + L) (irrc) tput clearและ แม้จะมีสิ่งที่ผู้โพสต์ก่อนหน้านี้ (@grawity) กล่าวว่าclearจะไม่แสดงบรรทัดใหม่ มันส่งTERM's ตั้งค่าตามที่กำหนดในterminfoหรือtermcapสำหรับฉันใช้gnome-terminal(xterm) perl -e'print "\33[H\33[2J"'มันเป็นเช่นเดียวกับคำสั่ง

หากคุณต้องการเพียงแค่ล้างบัฟเฟอร์ - เมื่อเทียบกับ reseting tput resetขั้วทั้งลองนี้ มันควรจะเร็วมากและทำในสิ่งที่คุณต้องการ (แม้ว่าคุณควรจะอ่านไฟล์ด้วยless)

tput resetส่งค่า terminfo เพื่อรีเซ็ต - บนเทอร์มินัลของฉัน (xterm) เหมือนกันกับ perl -e'print "\33c"'


1
ฉันไม่ได้บอกว่าจะclearมีการขึ้นบรรทัดใหม่ ฉันเพิ่งให้คำสั่งเป็นทางเลือกให้กับมันเพราะclearเพียงล้างหน้าจอ แต่ไม่ใช่บัฟเฟอร์ scrollback (ไม่ใช่ใน PuTTY หรือ Konsole อย่างน้อย)
grawity

1
ด้วยเหตุผลดังกล่าวการพิมพ์บรรทัดใหม่ขึ้นมาจึงไม่ใช่ทางเลือกที่ชัดเจนอีกต่อไป - คุณไม่รู้ว่าเครื่องจะทำอะไรกับสัญญาณที่ชัดเจน เป็นการดีกว่าที่จะบอกคนใหม่ว่าคุณมีฐานข้อมูลที่รู้วิธีจัดการเทอร์มินัลของคุณมีสองค่าคีย์หนึ่งที่แมปclearเป็นชื่อสัญญาณสัญญาณและหนึ่งที่แมปresetกับสัญญาณ - และหลังเท่านั้น ผลในการล้างบัฟเฟอร์เลื่อนกลับ resetส่งหลังเหนือสิ่งอื่นทำสนุก
Evan Carroll

1
ตามไปที่คำถามเดิม sixtyfootersdude ของclearไม่ได้ตั้งค่า scrollback ของเขา ( ESC cทำงานในxtermและทำงานบนพื้นฐานของ VTE แต่ไม่ใช่ใน PuTTY และ Konsole) เขาไม่ต้องการใช้resetอย่างใดอย่างหนึ่งเนื่องจากรีเซ็ตมากกว่าที่เขาต้องการ (ผมไม่ทราบว่าเขาใช้ขั้ว - แต่เปรียบเทียบsttyก่อนและหลังการรีเซ็ต.)
grawity

2
อย่างที่ฉันพูดเขาอาจต้องการtput resetซึ่งส่งสัญญาณรีเซ็ตไปยังเทอร์มินัล - โดยไม่ต้องกำหนดเงื่อนไขใหม่ "รีเซ็ต - แทนที่จะใส่สตริงการกำหนดค่าเริ่มต้นสตริงการรีเซ็ตของเทอร์มินัลจะถูกส่งออกถ้ามี (rs1, rs2, rs3, rf) หากไม่มีสตริงการรีเซ็ต แต่มีสตริงการเริ่มต้นอยู่ ไม่เช่นนั้นการรีเซ็ตจะทำหน้าที่เหมือนกันเพื่อเริ่มต้น " ที่นี่เรามีการตั้งค่าสตริงเพื่อที่ว่าสตริง init จะไม่ทำงาน
Evan Carroll

+1: สำหรับคำแนะนำอย่างไรก็ตามtput resetค่อนข้างช้า (เหมือนreset) printf '\033\143'เร็วกว่ามาก มีเหตุผลใดบ้างที่วิธีการพิมพ์เป็นอันตรายหรือไม่ดี?
sixtyfootersdude

9

อีกเทอร์มินัลคือ iTerm2 และมันมีลำดับการหลบหนีที่ค่อนข้างแปลกที่ใช้ในการล้าง scrollback ใน Bash shell ฉันใช้สิ่งที่ชอบ:

echo -ne '\033]50;ClearScrollback\a'

ในสคริปต์ โดยพื้นฐานแล้วมันคือตัวละคร ESC ตามด้วย " ]50;ClearScrollback" แล้วก็ตัวละครเบล


1
CMD + K ทำงานได้ใน iTerm2 CTRL + K ทำงานได้ในหลาย ๆ อย่าง
blockloop

ฉันชอบวิธีนี้เพราะให้ฉันล้างบัฟเฟอร์การเลื่อน iTerm2 จากสคริปต์เชลล์เมื่อสิ่งที่ต้องการclearและresetจะไม่ นี่ไม่ใช่คำตอบที่ดีที่สุดสำหรับคำถามนี้ ฉันคิดว่าคำตอบที่ถูกต้องสำหรับกรณีนี้คือสิ่งที่แอปพลิเคชันของเทอร์มินัลนำเสนอเช่น command-K ใน iTerm2, control-K ในที่อื่น ๆ เป็นต้น
LS

8

อาจเป็นวิธีที่ดีที่สุดในการล้างทุกอย่างคือการใช้ฟังก์ชั่นของเครื่อง:

  • Konsole: Ctrl+ Shift+ Kดู→ล้าง Scrollback และรีเซ็ต
  • เทอร์มินัล GNOME: แก้ไข→รีเซ็ตและล้าง
  • PuTTY: Ctrl+ right-click→ล้าง Scrollback

วิธีนี้ทำความสะอาดบัฟเฟอร์ทั้งสองและสถานะเทอร์มินัลจะถูกรีเซ็ตเป็นอย่างเดิมเมื่อเริ่มต้น (ซึ่งอาจหรืออาจจะไม่เหมือนกับการใช้งานreset)


อืมฉันไม่มีสิ่งนั้นภายใต้คำพังเพยของฉัน ...
sixtyfootersdude

@sixtyfootersdude: ฉันแน่ใจว่ามันอยู่ที่นั่นฉันไม่รู้เมนูที่แน่นอน (ไม่สามารถใช้gnome-terminalตัวเองได้ในขณะนี้) ... ลองดูที่ "เครื่องมือ" และเมนูอื่น ๆ
grawity

ใน xterm ปุ่ม ctrl-middle -> "รีเซ็ตและล้างบรรทัดที่บันทึกไว้"
Craig

3
น้อย -W + F foo.log

+Fมีไว้สำหรับ "ติดตาม" คล้ายกับtail -fแต่ให้คุณเลื่อนกลับได้เช่นกัน

ทุกขั้ว VTE-based (ของ GNOME Xfce ของ Roxterm) และ KDE Konsole lessให้คุณใช้ล้อเลื่อนเพื่อเลื่อนภายใน ฉันพบว่าค่อนข้างมั่นใจ


ทางเลือกเพื่อclear:

Perl - e 'พิมพ์ "\ n" x512;'

xterm -e 'tail -f foo.log'

3

บน Mac OS X Terminal.app:

ดู -> Clear Scrollback (หรือcommand- K)


@Rohit หากคำถามเป็นเฉพาะเกี่ยวกับ Mac OS X Terminal.app แล้วใช่นี่คือคำตอบที่ดี อย่างไรก็ตามคำถามเดิมนั้นคลุมเครือดีที่สุดที่ฉันสามารถบอกได้โดยคำนึงถึงเทอร์มินัลและระบบปฏิบัติการที่เล่นอยู่
David J.

2

มันไม่ใช่ปัญหา "ทุบตี" ขึ้นอยู่กับเทอร์มินัลที่คุณใช้ ตัวอย่างเช่นฉันใช้ "iterm2" กับ macbook เพื่อเชื่อมต่อเครื่องระยะไกลลินุกซ์ คุณสามารถใช้ "command + K" เพื่อล้างบัฟเฟอร์หรือในเมนูเลือก "แก้ไข" -> "ล้างบัฟเฟอร์"


1

เมื่อต้องการล้างหน้าจอคอนโซลและบัฟเฟอร์การเลื่อนเมื่อเรียกใช้ PuTTY สิ่งนี้ใช้ได้กับฉัน:

echo -en "\ec\e[3J"

นี่คือลำดับ "Esc" 2 อันที่ทำหน้าที่อิสระ ... พวกเขาสามารถใช้ตามลำดับใดก็ได้:

# clears the console screen, but not the scrollback buffer
# this is actually the escape code to "reset" the terminal
echo -en "\ec"

# clears the scrollback buffer, but not the console screen
# screen content remains, and cursor position remains at its last position
echo -en "\e[3J"

การใช้echo -en "\ec"รีเซ็ตเทอร์มินัลอาจเปลี่ยนการตั้งค่าเทอร์มินัลอื่น ๆ ของคุณ แทนที่จะ "รีเซ็ต" คุณสามารถทำได้:

# position the cursor to "Home" (Top Row, First Column)
echo -en "\e[H"

# Erase down: clear the screen from the cursor down to the bottom of the screen.
echo -en "\e[J"

# Note: this is supposed to clear the screen and position the cursor to home,
# but it didn't work like that for me. It cleared the entire screen (above and 
# below the cursor), but left the cursor at its last position.
echo -en "\e[2J"

# putting everything together
echo -en "\e[H\e[J\e[3J"

คุณสามารถใส่มันลงในเชลล์สคริปต์และใช้งานได้ดี


ในกรณีที่มีการขึ้นต่อกันของระบบ:

ฉันใช้ PuTTY Connection Manager (เวอร์ชั่น 0.7.1 BETA (รุ่น 136)), กับ PuTTY (Release 0.60)

พิมพ์ดีด:

echo \"$TERM\"; /bin/sh --version

รายงาน:

"xterm"
GNU bash, version 4.1.2(1)-release-(x86_64-redhat-linux-gnu) ...

1

ในการทำความสะอาดบัฟเฟอร์หน้าจอสำหรับฮาร์ดแวร์ TTY ใน FreeBSD คุณสามารถใช้ "vidcontrol - การควบคุมคอนโซลระบบและยูทิลิตีการกำหนดค่า" ด้วยพารามิเตอร์ -C ล้างบัฟเฟอร์ประวัติ

vidcontrol -C

คำสั่งจะลบบัฟเฟอร์หน้าจอทั้งหมดสำหรับคอนโซลปัจจุบันเหนือสิ่งที่คุณเห็นในขณะนี้ คุณอาจต้องการ 'ล้าง' ก่อนหรือไม่ก็ได้ตามใจคุณ


0

หากคุณต้องการให้แน่ใจว่าคุณกำลังดูรายการล่าสุดในไฟล์บันทึกการใช้หางควรใช้แทนclear/ catซึ่งฉันคิดว่าคุณกำลังใช้อยู่


อันที่จริงฉันใช้ tail -f (บันทึกต่อเนื่อง) อย่างไรก็ตามเนื่องจากบางครั้งพวกเขาคายออกมาหลายพันบรรทัดมันเป็นสิ่งสำคัญที่จะต้องเลื่อนกลับ อย่างไรก็ตามมันเป็นการดีที่จะรู้ว่าฉันไม่ได้กลับไปที่ท่อนซุงเก่า
sixtyfootersdude

0

อืมม ฉันเดาว่าถ้าคุณใช้ konsole คุณจะโชคไม่ดี มันเคยเป็นคุณสามารถ "ล้าง scrollback" Konsole จะไม่ยอมให้คุณทำอย่างนั้นอีกต่อไป คุณต้องรีเซ็ตเช่นกันดังนั้นจึงเป็นการฆ่าโปรแกรมที่คุณใช้งานอยู่ ฉันเดาว่าฉันต้องการโปรแกรมเทอร์มินัลใหม่ ......

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