ล้างหน้าจอเทอร์มินัลสำหรับของจริง


382

การใช้clearคำสั่งบนเครื่องเทอร์มินัลเท่านั้นที่ทำให้ผู้ใช้คิดว่าหน้าจอถูกลบทิ้ง ... คุณยังสามารถเห็นผลลัพธ์จากคำสั่งก่อนหน้าเมื่อคุณเลื่อนโดยใช้เมาส์ สิ่งนี้ทำให้ชีวิตลำบากเมื่อคุณจมน้ำตายในเหตุการณ์สึนามิ

วิธีแก้ปัญหาต่าง ๆ (รหัสหลบหลีก ฯลฯ ) ซึ่งสามารถพบได้บนอินเทอร์เน็ตเป็นเพียงรูปแบบของสิ่งที่คำสั่งที่ชัดเจนทำแล้ว

ดังนั้นคุณจะล้างเนื้อหาของเทอร์มินัลใน Linux จริงอย่างไร


44
ฉันจัดหมวดหมู่นี้เป็น "เครื่องมือซอฟต์แวร์ที่ใช้กันทั่วไปโดยโปรแกรมเมอร์" (กล่าวถึงในคำถามที่พบบ่อยว่าถูกต้อง)
Autodidact

5
สิ่งที่คุณถามจริงๆคือ "ฉันจะล้างบัฟเฟอร์เลื่อนกลับของเทอร์มินัลได้อย่างไร" ซึ่งเป็นอิสระจากเชลล์ (Bash) หรือ Ubuntu
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

@ spiderplant0 อาจเป็นเพราะ AskUbuntu เป็นสถานที่ที่เหมาะสมสำหรับสิ่งนี้ - ในเวลานี้ ไม่มีอยู่เมื่อถูกถามดังนั้นจึงถูกปิดเป็นหัวข้อปิดแม้ว่าจะไม่เป็นเช่นนั้น
jcollum

1
นั่นเป็นคำถามทั่วไปที่ส่งผลกระทบไม่เพียง แต่ Ubuntu หรือทุบตีตามที่ระบุไว้ @Dennis ฉันจะเปลี่ยนหัวข้อ "ล้างหน้าจอ Ubuntu ของทุบตีจริง" -> "ล้างหน้าจอเทอร์มินัลสำหรับของจริง"
Ra_

มีเทอร์มินัลหลายประเภทที่คุณสามารถรัน Bash ได้ (คำว่า " bash terminal " นั้นไม่มีความหมาย) "การล้าง" ไม่สามารถใช้ได้กับทุกคน - บางครั้งการประมาณที่ใกล้ที่สุดคือการฉีกกระดาษและ bin / shred / Burn / ทำลายบิตที่คุณไม่ต้องการ
Toby Speight

คำตอบ:


500

ใช้คำสั่งต่อไปนี้เพื่อทำหน้าจอที่ชัดเจนแทนที่จะเพิ่มเพียงบรรทัดใหม่ ...

printf "\033c"

ใช่นั่นคือ 'printf' บน bash prompt

คุณอาจต้องการกำหนดนามแฝงว่า ...

alias cls='printf "\033c"'

คำอธิบาย

\033 == \x1B == 27 == ESC

ดังนั้นสิ่งนี้จึงกลาย<ESC>cเป็นรหัสหลบหนี VT100 สำหรับการรีเซ็ตเทอร์มินัล นี่คือข้อมูลเพิ่มเติมบางอย่างเกี่ยวกับรหัสการหลบหนีของเทอร์มินัล

แก้ไข

นี่คือวิธีอื่น ๆ ในการทำ ...

printf "\ec" #\e is ESC in bash
echo -en "\ec" #thanks @Jonathon Reinhart.
# -e    Enable interpretation of of backslash escapes
# -n    Do not output a new line

KDE

ด้านบนไม่ทำงานบนคอนโซล KDE (เรียกว่า Konsole) แต่มีความหวัง! ใช้ลำดับคำสั่งต่อไปนี้เพื่อล้างหน้าจอและบัฟเฟอร์การเลื่อนกลับ ...

clear && echo -en "\e[3J"

หรืออาจใช้ชื่อแทนต่อไปนี้ใน KDE ...

alias cls='clear && echo -en "\e[3J"'

ผมได้สั่งการหักบัญชีเลื่อนกลับมาจากที่นี่


4
นี่คือเทอร์มินัลเฉพาะเจาะจง "\033c"คือESC cลำดับการหลีกเลี่ยง VT-XXX สำหรับ "Full Reset (RIS)" ผู้ใช้ปลายทางเกือบทุกคนที่ใช้ในวันนี้สามารถใช้งานร่วมกับ VT ได้ แต่ถ้าคุณพบว่าคุณใช้เทอร์มินัลแปลก ๆ สิ่งนี้อาจไม่ทำงาน @ vpit3833 คำตอบมีแนวโน้มที่จะทำงานได้มากกว่าสมมติว่าตั้งค่า TERM อย่างถูกต้อง
Laurence Gonsalves

2
printfเป็น Bash builtin (เป็นความจริงที่ว่ามันเป็นไบนารีที่แยกจากกัน แต่ builtins มีความสำคัญกว่าและเชลล์ทันสมัยส่วนใหญ่มีprintf)
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

2
@ SDX2000 ตกลง ... ฉันรู้ว่าคุณระบุ Ubuntu และฉันคิดว่าสิ่งเหล่านี้จะทำงานคล้ายกับเทอร์มินัล "ทันสมัย" ทั้งหมด ฉันเริ่มทดสอบเทอร์มินัลของ MAC และไม่ได้รีเซ็ต แต่มันรีเซ็ตใน Centos Linux ของฉัน
พฤศจิกายน

12
echo -en "\ 033c"
Jonathon Reinhart

2
$ 0.02 ไม่กี่ปีต่อมา แต่ฉันเป็นนักเรียนที่จุฬาฯ ถามศาสตราจารย์ระบบปฏิบัติการของฉันและเขาบอกว่านี่เป็นตัวอย่างของลำดับการหลบหนีของ ANSI: en.wikipedia.org/wiki/ANSI_escape_codeนี่คือตัวอย่างของการส่งสัญญาณในวง
abgordon

216

ลองresetดู มันจะล้างหน้าจอเทอร์มินัล แต่คำสั่งก่อนหน้านี้สามารถเข้าถึงได้ผ่านลูกศรหรือคีย์ใดที่มีผลผูกพันคุณ


3
ขอบคุณ! แต่ล้างทุกสิ่งรวมถึงพรอมต์ ดูคำตอบของฉันสำหรับวิธีแก้ปัญหาซึ่งไม่ได้ทำ
Autodidact

5
@ SDX2000 ทั้งล้างข้อมูลให้จากนั้นเชลล์สร้างขึ้นใหม่ ข้อเสียอย่างหนึ่งในการรีเซ็ตคือดูเหมือนว่าจะช้าลงเล็กน้อย (อาจเป็นเพราะมันทำได้มากกว่าเพียงแค่ปล่อย ESC c) แต่มันสามารถพกพาได้มากกว่า
Laurence Gonsalves

@ Laurence ขอบคุณสำหรับการชี้แจง ... ฉันลองรีเซ็ต แต่มันช้ามากจนฉันคิดว่าพรอมต์นั้นถูกเคลียร์พร้อมกับทุกอย่างอื่น ฉันจะยังคงชอบที่จะใช้ESC cเนื่องจากฉันอาจจะไม่เคยใช้เทอร์มินัลใด ๆ นอกเหนือจากที่อูบุนตูใช้ แม้ว่าresetอาจจะมีประโยชน์สักวันหนึ่งเมื่อฉันทำการดีบั๊กเครื่องระยะไกลผ่านทางพอร์ตอนุกรมและอื่น ๆ
Autodidact

1
@ การรีเซ็ต SDX2000 นั้นมีประโยชน์สำหรับกรณีเหล่านั้นที่สถานีของคุณได้รับการจัดการที่ไม่ดีเนื่องจากคุณฆ่าบางสิ่ง (หรือ catted ไฟล์ไบนารี) และทำให้คำศัพท์ของคุณอยู่ในสถานะที่ถูกควบคุม เคยเข้าสู่สถานะที่พรอมต์ของคุณปรากฏขึ้น แต่ไม่ใช่การพิมพ์ของคุณและเมื่อคุณกด Enter พรอมต์ใหม่จะปรากฏขึ้นถัดจากพรอมต์ก่อนหน้าแทนที่จะเป็นด้านล่าง รีเซ็ตการแก้ไขที่ นั่นคือทั้งหมดที่ฉันใช้เพื่อ ... ฉันไม่เคยต้องการ / ปรารถนาที่จะลบบัฟเฟอร์การเลื่อนกลับ
Laurence Gonsalves

4
ความล่าช้าหนึ่งวินาทีที่เกี่ยวข้องกับresetฉันเหลือทน
Jonathon Reinhart

62
tput reset

นั่นจะเป็นการหลอกลวง!


2
ดำเนินการเร็วกว่าธรรมดาresetมาก แต่ก็ยังทำงานได้!
Ponkadoodle

1
เร็วกว่าเพียงแค่ reset
l2aelba

เรื่องนี้ไม่ได้เสมอตัดมัน แต่ tput ชัดเจนได้
เชื่อมโยงกัน

7

ไม่มีคำตอบที่ฉันอ่านทำงานใน PuTTY ดังนั้นฉันจึงพบความคิดเห็นในบทความนี้ :

ในการตั้งค่าสำหรับการเชื่อมต่อของคุณภายใต้ "Window-> Behavior" คุณจะพบการตั้งค่า "เมนูระบบปรากฏบน ALT เพียงอย่างเดียว" จากนั้น CTRL + L, ALT, l (นั่นคือตัวพิมพ์เล็ก L) จะเลื่อนหน้าจอแล้วล้างบัฟเฟอร์การเลื่อน

(เกี่ยวข้องกับ OP เพราะฉันเชื่อมต่อกับเซิร์ฟเวอร์ Ubuntu แต่เห็นได้ชัดว่ามีความเกี่ยวข้องไม่ว่าเซิร์ฟเวอร์ของคุณจะทำงานอยู่ที่ใดก็ตาม)


ความคิดเห็น 3 ปีจาก @Dennis Williamson ทำให้ฉันได้รับคำตอบนี้
TecBrat

นอกจากนี้ยังระบุว่าใน "หน้าต่าง" การตั้งค่าของฉาบที่คุณเปิดใช้งาน "จะปรากฏเมนูระบบบน ALT-อวกาศ" ที่คุณสามารถทำได้อย่างรวดเร็วCTRL+Lแล้วALT+Space, Uข้ามแรกหน้าต่าง terminal แล้วรีเซ็ต scrollback สำหรับจริง
Pierre Voisin

6

ลิงก์ต่อไปนี้จะอธิบายวิธีทำให้นามแฝงนั้นถาวรดังนั้นคุณไม่ต้องพิมพ์ต่อไป

/ubuntu/17536/how-do-i-create-a-permanent-bash-alias

นี่คือขั้นตอนโดยละเอียดที่ลิงค์นั้น

  1. vim ~ / .bashrc หรือ gedit ~ / .bashrc หรือโปรแกรมแก้ไขข้อความที่คุณชอบ
  2. ใส่ alias cls = 'printf "\ 033c"' ที่ด้านล่างของไฟล์
  3. บันทึกและออก
  4. . ~ / .bashrc (และใช่ควรมีช่องว่างระหว่าง. และ ~)
  5. ตอนนี้ตรวจสอบเพื่อดูว่าทุกอย่างทำงาน!

ฉันไม่ได้รับเครดิตสำหรับข้อมูลนี้เพียงแค่ผ่านมันไป


4

ด้วย KDE และ Ubuntu 12.04 LTS และเทอร์มินัล "Konsole" ไม่มีคำตอบใด ๆ อย่างไรก็ตามการกดแป้นพิมพ์ลัดเริ่มต้น CTRL + Shift + X ใช้งานได้! ที่มา:

https://bugs.kde.org/show_bug.cgi?id=288913


3
สิ่งนี้ได้ถูกเปลี่ยนเป็น CTRL + Shift + K ในรุ่น KDE ในภายหลัง: bugs.kde.org/show_bug.cgi?id=282593
Coder ที่ปรับปรุงแล้ว

4

คำสั่งที่เป็นมิตรกับมนุษย์ที่ฉันโปรดปรานสำหรับสิ่งนี้คือ:

reset

ทดสอบกับ xterm และ VT100 นอกจากนี้ยังช่วยหลังการยุติโปรแกรมที่ผิดปกติ เก็บบัฟเฟอร์คำสั่งดังนั้นลูกศรขึ้นจะวนรอบคำสั่งก่อนหน้า

ไชโย: D


3

ฉันรู้ว่าโซลูชันที่ใช้การพิมพ์บรรทัดใหม่นั้นไม่ได้รับการสนับสนุนมากนัก แต่หากทุกอย่างล้มเหลวทำไมไม่ทำเช่นนั้น โดยเฉพาะอย่างยิ่งที่คนทำงานในสภาพแวดล้อมที่คนอื่นมีโอกาสที่จะเห็นหน้าจอ แต่ยังไม่สามารถ keylog ทางออกหนึ่งที่เป็นไปได้คือนามแฝงต่อไปนี้:

alias c="printf '\r\n%.0s' {1..50}"

จากนั้นเมื่อต้องการ "ล้าง" เนื้อหาปัจจุบันของหน้าจอ (หรือซ่อนซ่อนเนื้อหา) เพียงแค่พิมพ์c+Enterที่เทอร์มินัล


2

เพียงเพื่อเพิ่มว่าtmuxบัฟเฟอร์เลื่อนไม่ได้ล้างด้วยclear, หรือreset คุณจำเป็นต้องprintf :clear-historyดูการเชื่อมโยง


-2
echo -e "\e[3J"

ใช้งานได้กับ Linux Machines


4
แม้ว่าเราจะขอบคุณสำหรับคำตอบของคุณมันจะดีกว่าถ้ามันให้คุณค่าเพิ่มเติมกับคำตอบอื่น ๆ ในกรณีนี้คำตอบของคุณไม่ได้ให้คุณค่าเพิ่มเติมเนื่องจากผู้ใช้รายอื่นโพสต์โซลูชันนั้นแล้ว หากคำตอบก่อนหน้านี้มีประโยชน์กับคุณคุณควรโหวตมันแทนการทำซ้ำข้อมูลเดิม
Toby Speight

-53

รวบรวมแอพนี้

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}

33
ขออภัยนี่ไม่ใช่ทางออกที่ดีที่สุด มีวิธีที่ดีกว่าการพ่น 999 newlines
pbfy0

2
จริงๆแล้วมันมีคุณค่าบางอย่างสำหรับเรื่องนี้ ในอาคารบางแห่งการล้างหน้าจอด้วยวิธีอื่นจะฆ่าประวัติและไม่อนุญาตให้คุณเลื่อนกลับ ... แม้ว่าจะมี 999 บรรทัดนิ้วของฉันจะเหนื่อย ผู้ชายที่น่าสงสาร.
JoshuaDavid

@JoshuaDavid จุดทั้งหมดของคำถามคือ OP ไม่ต้องการเลื่อนกลับหลังล้าง
Socowi

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