วิธีการล้างผลลัพธ์ก่อนหน้าใน Terminal ใน Mac OS X


523

ฉันรู้ว่าclearคำสั่งที่ 'ล้าง' หน้าจอปัจจุบัน แต่ทำได้เพียงแค่พิมพ์บรรทัดใหม่จำนวนมากเนื้อหาที่เคลียร์เพิ่งเลื่อนขึ้น

มีวิธีการล้างเอาต์พุตก่อนหน้าทั้งหมดจากเทอร์มินัลทั้งหมดหรือไม่เพื่อให้ฉันไม่สามารถเข้าถึงได้แม้จะเลื่อนขึ้นหรือไม่?


1
คุณเคยพบวิธีในการทำสิ่งนี้ที่ทำงานในเชลล์สคริปต์หรือไม่?
Zev Eisenberg

7
@ Zeevenberg ฉันไม่คิดอย่างนั้น อย่างไรก็ตามตอนนี้ฉันคิดว่าฉันไม่ต้องการสิ่งนี้เลย Command+Kผมพอใจกับ
Eonil

@ZevEisenberg คำตอบที่อัปเดตของฉัน (และอีกหนึ่งคำตอบ) แสดงให้คุณเห็นว่าจะทำอย่างไรจากสคริปต์
Alok Singhal

คำตอบ:


1098

วิธีล้างเครื่องด้วยตนเอง:

+K

Command+ Kสำหรับแป้นพิมพ์ที่ใหม่กว่า

เพื่อล้าง terminal จากภายในเชลล์สคริปต์

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'

@fearless_fool apple.stackexchange.com/a/31887อาจทำได้หรือไม่ ถ้าเป็นเช่นนั้นโปรดแจ้งให้เราทราบ!
Alok Singhal

ใช่ แต่ดูด้านล่าง ( stackoverflow.com/a/26615036/558639 ) เพื่อวิธีที่ดีกว่าโดยสิ้นเชิง
fearless_fool

9
หากคุณกดปุ่มนี้โดยไม่ตั้งใจผู้ใช้จะไปดูบัฟเฟอร์ที่ลบอย่างไรได้อย่างไร
Joshua Pinter

4
@JoshPinter อย่าเพิ่งกดโดยไม่ตั้งใจ :) (พิจารณาใช้clearทุกกรณียกเว้นตำแหน่งที่คุณต้องการให้ประวัติ scrollback หายไปเช่นเมื่อคุณกำลังจะพิมพ์)
Wildcard

2
@ Wildcard ยุติธรรมเพียงพอ :) clearคำแนะนำที่ดีเกี่ยวกับการใช้ ฉันรู้สึกว่าพวกเขาควรจะกลับรายการ พิมพ์ดีดดูเหมือนเจตนามากกว่าการกดปุ่มclear Command + K
Joshua Pinter

85

วิธีที่ดีกว่าในการล้างหน้าจอจากภายในสคริปต์ ...

หากคุณกำลังใช้แอปพลิเค OSX ร์มินัล (ตามที่ระบุไว้โดยสหกรณ์) ซึ่งเป็นวิธีการที่ดี (ขอบคุณhttps://apple.stackexchange.com/a/113168 ) เป็นเพียงแค่นี้:

clear && printf '\e[3J'

หรือรัดกุมมากกว่า (หมวกให้https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

ซึ่งล้างบัฟเฟอร์การเลื่อนเช่นเดียวกับหน้าจอ มีตัวเลือกอื่น ๆ เช่นกันดูhttps://apple.stackexchange.com/a/113168สำหรับข้อมูลเพิ่มเติม

คำตอบเดิม

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

คุณหลีกเลี่ยงปัญหานี้ได้ด้วยการปรับแต่ง AppleScript เพื่อล้างหน้าจอเฉพาะเมื่อหน้าจอดังกล่าวอยู่ข้างหน้าสุด (ทำจากhttps://apple.stackexchange.com/a/31887 ):

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

... แต่เมื่อไม่ใช่หน้าต่างปัจจุบันเอาต์พุตจะซ้อนกันจนกว่าจะกลายเป็นปัจจุบันอีกครั้งซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ


1
ฉันใช้ "วิธีที่ดีกว่า" ใน.bash_profileและมันยอดเยี่ยมเพราะฉันไม่ได้รับบัฟเฟอร์ผิดพลาดอีกต่อไปเมื่อเปิดหน้าต่างเทอร์มินัลใหม่
Patrick Roberts

1
นี่คือคำตอบที่ถูกต้องที่สุดในแนวคิด คำตอบของ qiuyi หลีกเลี่ยง && เมื่อเสียสละการอ่านเพียงเล็กน้อย หากคำตอบของ Alok สามารถขยายออกไปเพื่อล้างเทอร์มินัลที่กำลังเรียกใช้สคริปต์ปัจจุบันมันจะเป็นการปรับปรุง แต่สิ่งนี้ง่ายกว่า
Zack Morris

1
นี่เป็น waaaaaaaaaaay ที่ดีกว่าสำหรับการเขียนสคริปต์ ขอบคุณมัด!
Andy

นี่คือที่สมบูรณ์แบบสำหรับเมื่อคุณต้องการระบบอื่นขอบคุณ!
JBRWilkinson

48

วิธีที่น่ารักคือ printf '\33c\e[3J'


3
นี่เป็นวิธีที่ดีที่สุด เราควรกำหนดนามแฝงเช่นalias cls='printf "\33c\e[3J"'
mpyw

ขอบคุณนี่คือสิ่งที่ฉันต้องการ
GigaBass

ทำงานใน iTerm2 เช่นกัน
Anders Zommarin

1
@ LoïcFaure-Lacroix \33cดำเนินการเทียบเท่าclearคำสั่งซึ่งโดยทั่วไปจะเลื่อนหน้าจอจนกว่าคุณจะไม่เห็นเนื้อหาก่อนหน้านี้ มันล้างหน้าจอ แต่ไม่ใช่บัฟเฟอร์การเลื่อนกลับ (เช่นคุณยังสามารถใช้แถบเลื่อนเพื่อดูผลลัพธ์เก่า) เพิ่ม\e[3Jไปยังเพื่อล้างบัฟเฟอร์เลื่อนกลับจริง
luiss

@EirNym เพิ่มfunction cls { printf '\33c\e[3J\33c' }บรรทัดใน~/.profile(หรือทั้งระบบ/etc/profile) สิ่งนี้ควรใช้กับสภาพแวดล้อมเดสก์ท็อปใน macOS, FreeBSD, Linux และอื่น ๆ หมายเหตุสิ่งที่พิเศษ\33cคือการล้าง\e[3Jตัวอักษรพิเศษใน non-macOS (โดยทั่วไปสำหรับ Linux / FreeBSD เราต้องการเท่านั้นprintf '\33c')
Raven vulcan

33

วางสิ่งนี้ใน. bash_profile หรือ. bashrc ของคุณ

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}

นี่ควรเป็นคำตอบที่ถูกต้อง AppleScript อาจจะยุ่ง แต่เดี๋ยวก่อนทำงานให้เสร็จ ขอบคุณ
allanberry

มีผู้โหวตแล้ว แต่คำตอบอีกข้อหนึ่งระบุไว้ว่านี่เป็นการล้างหน้าต่างทั้งหมด!
Michael Bushe

20

ใน Mac OS X Terminal ฟังก์ชันนี้มีอยู่แล้วในแอปพลิเคชั่น Terminal View->Clear Scrollback(ค่าเริ่มต้นคือCMD+ K)

ดังนั้นคุณสามารถกำหนดสิ่งนี้ใหม่ได้ตามต้องการด้วยแป้นพิมพ์ลัดของ Apple เพียงเพิ่มทางลัดใหม่สำหรับเทอร์มินัลด้วยคำสั่ง "Clear Scrollback" (ฉันใช้CMD+ Lเพราะมันคล้ายกับCTRL+ Lเพื่อล้างเนื้อหาของหน้าจอปัจจุบันโดยไม่ต้องล้างบัฟเฟอร์)

ไม่แน่ใจว่าคุณจะใช้สิ่งนี้อย่างไรในสคริปต์ (อาจเป็น AppleScript เหมือนที่คนอื่น ๆ ชี้)


1
ตั้งแต่ Yosemite (10.10) View->Clear Scrollbackจะไม่มีอยู่ในเมนูของ Terminal อีกต่อไป แม้ว่าแป้นพิมพ์ลัดCMD+ Kยังใช้งานได้
Nicolas Miari

1
@NicolasMiari ดูเหมือนว่าClear Scrollbackเพิ่งจะย้ายจากViewไปยังEditในโยเซมิตี
BrainSteel


9

หรือคุณสามารถส่งตัวแบ่งหน้า (ฟีดรูปแบบ ASCII) โดยกด:

CTRL+L

ในขณะที่เทคนิคนี้เพิ่งเริ่มหน้าใหม่นี้มีผลกระทบสุทธิเช่นเดียวกับวิธีอื่น ๆ ทั้งหมดในขณะที่เร็วขึ้นมาก (ยกเว้นสำหรับโซลูชั่น Apple + K แน่นอน)

และเนื่องจากนี่เป็นคำสั่งควบคุม ASCII จึงทำงานได้ในทุกเชลล์


1
ที่ล้างหน้าจอ แต่ปล่อยให้บัฟเฟอร์การเลื่อนกลับยังคงอยู่
George

มันไม่เหมือนกันถ้าคุณต้องการใช้ cmd + f เพื่อเป็นตัวอย่าง
bormat


6

Command + Kจะล้างเอาต์พุตก่อนหน้า

หากต้องการล้างข้อความที่ป้อนให้ข้ามไปก่อนด้วย " Command + A " แล้วล้างข้อความทางด้านขวาของตัวชี้ด้วย " Control + K "

ตัวอย่างภาพ: ป้อนคำอธิบายรูปภาพที่นี่



5

ทำในสิ่งที่ถูกต้องทำในสิ่งที่ถูกต้อง!

ล้างไปที่เครื่องหมายก่อนหน้า:Command-L

ล้างไปยังบุ๊คมาร์คก่อนหน้า:Option-Command-L

ล้างเพื่อเริ่ม: Command-K

ช่วยพวกคุณ!


1

ฉันไม่สามารถทำงานใด ๆ ข้างต้น (บน macOS)

ชุดค่าผสมทำงานให้ฉัน -

IO.write "\e[H\e[2J\e[3J"

เป็นการลบบัฟเฟอร์และหน้าจอ


IO.write คืออะไร ฉันต้องแทนที่มันด้วย printf เพื่อให้มันใช้งานได้ ขอบคุณอยู่ดี อันนี้ใช้ได้ดีที่สุดสำหรับฉัน
Fitsyu

1
IO.writeผมไม่แน่ใจว่าเหตุผลที่ผมเลือก มันควรจะทำงานได้เหมือนกัน แต่คุณตัดสินใจที่จะพิมพ์อักขระเหล่านั้นไปยังเทอร์มินัล
Michael Baldry

1

การพิมพ์ข้อความต่อไปนี้ในเทอร์มินัลจะเป็นการลบประวัติของคุณ (หมายถึงการใช้ลูกศรขึ้นจะทำให้คุณไม่ได้รับอะไร) - แต่จะไม่ล้างหน้าจอ:

history -c

มันทำ @phil มันจะลบมันอย่างถาวรจากดิสก์หรือพวกเขายังคงสามารถเรียกคืนได้ในทางใดทางหนึ่ง?
Steven Roose

โดยทั่วไปจะลบไฟล์ ~ / .bash_history ดังนั้นหากคุณสามารถกู้คืนได้คุณสามารถกู้คืนคำสั่งที่ถูกลบออกได้
Ryan Pendleton

ไม่มันไม่ทำงาน ยังมีประวัติเลื่อนขึ้นและฉันสามารถเลื่อนขึ้นเพื่อดูอีกครั้ง
Eonil

26
ไม่ใช่สิ่งที่ถูกถาม นี่เป็นการล้างประวัติไม่ใช่บัฟเฟอร์ปัจจุบันซึ่งเป็นสองสิ่งที่แตกต่างกันมาก
Sean Cameron

1
ไม่ใช่สิ่งที่ถูกถามและเป็นอันตราย ; ฉันถูกกัดโดยสิ่งนี้และประวัติของฉันมีสิ่งที่สำคัญ
Elazar

0

ลองทำสิ่งนี้ถ้าคุณรู้สึกหนักใจกับผลลัพธ์ถ้าคุณต้องการตัวกรอง

adb -d shell dumpsys activity | grep ActivityRecord


-4

CMD + K ดูเหมือนจะทำงานได้ตลอดเวลาสำหรับฉัน


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