Làm cách nào để xóa đầu ra trước đó trong Terminal trong Mac OS X?


523

Tôi biết clearlệnh 'xóa' màn hình hiện tại, nhưng nó thực hiện điều này chỉ bằng cách in nhiều dòng mới - nội dung bị xóa chỉ cần cuộn lên.

Có cách nào để xóa hoàn toàn tất cả đầu ra trước đó khỏi thiết bị đầu cuối để tôi không thể tiếp cận nó ngay cả khi cuộn lên không?


1
Bạn đã bao giờ tìm thấy một cách để làm điều này hoạt động trong một kịch bản shell?
Zev Eisenberg

7
@ZevEisenberg Tôi không nghĩ vậy. Dù sao, bây giờ tôi nghĩ rằng tôi không cần điều này cả. Tôi hài lòng với Command+K.
Eonil

@ZevEisenberg câu trả lời cập nhật của tôi (và một câu trả lời khác) chỉ cho bạn cách thực hiện từ tập lệnh.
Alok Singhal

Câu trả lời:


1099

Để xóa thiết bị đầu cuối bằng tay:

+K

Command+ Kcho bàn phím mới hơn

Để xóa thiết bị đầu cuối từ trong một tập lệnh shell;

/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 có làm được không? Nếu có, xin vui lòng cho tôi biết!
Alok Singhal

Vâng, vâng, nhưng xem bên dưới ( stackoverflow.com/a/26615036/558639 ) để biết cách tốt hơn hoàn toàn.
sợ

9
Nếu bạn vô tình nhấn nút này, làm thế nào một người sẽ xem về bộ đệm bị xóa?
Joshua Pinter

4
@JoshPinter, đừng vô tình nhấn nó. :) (Cân nhắc sử dụng clearcho tất cả các trường hợp ngoại trừ trường hợp bạn cần lịch sử cuộn lại để thực sự biến mất, ví dụ: khi bạn sẽ in.)
Wildcard

2
@Wildcard Đủ công bằng. :) Lời khuyên tốt về việc sử dụng clear. Tôi cảm thấy như họ nên được đảo ngược, mặc dù. Gõ clearcó vẻ có chủ ý hơn đánh Command + K.
Joshua Pinter

85

Một cách tốt hơn để xóa màn hình từ trong tập lệnh ...

Nếu bạn đang sử dụng ứng dụng OSX Terminal (như OP đã nêu), cách tiếp cận tốt hơn (nhờ https://apple.stackexchange.com/a/113168 ) chỉ là:

clear && printf '\e[3J'

hoặc chính xác hơn (mẹo đội mũ đến https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

giúp xóa bộ đệm cuộn cũng như màn hình. Ngoài ra còn có các tùy chọn khác, xem https://apple.stackexchange.com/a/113168 để biết thêm.

câu trả lời gốc

Câu trả lời AppleScript được đưa ra trong chuỗi này hoạt động, NHƯNG nó có tác dụng phụ khó chịu khi xóa BẤT K window cửa sổ đầu cuối nào đang hoạt động. Điều này thật đáng ngạc nhiên nếu bạn đang chạy tập lệnh trong một cửa sổ và cố gắng hoàn thành công việc ở một cửa sổ khác!

Bạn tránh điều này bằng cách tinh chỉnh AppleScript để chỉ xóa màn hình nếu nó ở phía trước bằng cách thực hiện việc này (lấy từ https://apple.stackexchange.com/a/31887 ):

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

... nhưng như khi nó không phải là cửa sổ hiện tại, đầu ra sẽ xếp chồng lên nhau cho đến khi nó trở thành hiện tại, điều này có thể không phải là điều bạn muốn.


1
Tôi đã sử dụng "cách tốt hơn" trong .bash_profilevà thật tuyệt vời vì đôi khi tôi không còn nhận được bộ đệm bị rối khi mở cửa sổ terminal mới.
Patrick Roberts

1
Đây là câu trả lời đúng nhất về mặt khái niệm. câu trả lời của qiuyi tránh được && với sự hy sinh của một chút khả năng đọc. Nếu câu trả lời của Alok có thể được mở rộng để xóa thiết bị đầu cuối đang chạy tập lệnh hiện tại, thì đó sẽ là một cải tiến, nhưng điều này đơn giản hơn.
Zack Morris

1
Đây là waaaaaaaaaa tốt hơn cho kịch bản. Cảm ơn nhiều!
Andy

Điều này là hoàn hảo khi bạn ssh'd đến một số hệ thống khác, cảm ơn!
JBRWilkinson

48

Cách hay là printf '\33c\e[3J'


3
Đây la cach tôt nhât. Chúng ta nên định nghĩa bí danh nhưalias cls='printf "\33c\e[3J"'
mpyw

Cảm ơn bạn, đây chính xác là những gì tôi cần.
GigaBass

Hoạt động trong iTerm2 cũng vậy
Anders Zommarin

1
@ LoïcFaure-Lacroix, \33cthực hiện tương đương với clearlệnh, về cơ bản chỉ cần cuộn màn hình cho đến khi bạn không thể thấy nội dung trước đó. Nó xóa màn hình, nhưng không xóa bộ đệm cuộn lại (tức là bạn vẫn có thể sử dụng các thanh cuộn để xem đầu ra cũ). Thêm vào \e[3Jđể thực sự xóa bộ đệm cuộn lại.
luiss

@EirNym, thêm function cls { printf '\33c\e[3J\33c' }dòng trong ~/.profile(hoặc toàn hệ thống /etc/profile). Điều này sẽ hoạt động cho các môi trường máy tính để bàn trong macOS, FreeBSD, Linux, v.v ... Lưu ý phần bổ sung \33clà để xóa phần bổ sung bằng \e[3Jchữ không phải là macOS (về cơ bản là cho Linux / FreeBSD, chúng tôi chỉ cần printf '\33c').
quạ Vulcan

33

Đặt cái này trong .bash_profile hoặc .bashrc của bạn

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

Đây phải là câu trả lời chính xác. AppleScript có thể lộn xộn, nhưng này, hoàn thành công việc. Cảm ơn.
allanberry

Đã nâng cấp, nhưng một câu trả lời khác lưu ý rằng điều này xóa tất cả các cửa sổ!
Michael Bushe

20

Trên Mac OS X Terminal, chức năng này đã được tích hợp sẵn cho Ứng dụng đầu cuối dưới dạng View->Clear Scrollback(Mặc định là CMD+ K).

Vì vậy, bạn có thể gán lại tùy ý này với các phím tắt trên Bàn phím của Apple. Chỉ cần thêm một lối tắt mới cho Terminal bằng lệnh "Clear Scrollback". (Tôi sử dụng CMD+ L, vì nó tương tự CTRL+ Lđể xóa nội dung màn hình hiện tại mà không xóa bộ đệm.)

Không chắc chắn cách bạn sẽ sử dụng điều này trong một tập lệnh (có thể là AppleScript như những người khác đã chỉ ra).


1
Kể từ Yosemite (10.10), View->Clear Scrollbackkhông còn xuất hiện trong menu của Terminal. Phím tắt CMD+ Kvẫn hoạt động, mặc dù.
Nicolas Miari

1
@NicolasMiari Hình như Clear Scrollbackvừa mới chuyển Viewđến Editở Yosemite.
BrainSteel 8/11/2015

10

Với Mac OS X Yosemite (10.10), hãy sử dụng Option + Command + Kđể xóa cuộn trong Terminal.app.


9

Hoặc bạn có thể gửi ngắt trang (nguồn cấp dữ liệu mẫu ASCII) bằng cách nhấn:

CTRL+L

Mặc dù về mặt kỹ thuật này chỉ bắt đầu một trang mới, nhưng điều này có hiệu ứng ròng tương tự như tất cả các phương pháp khác, trong khi nhanh hơn rất nhiều (tất nhiên trừ giải pháp Apple + K).

Và bởi vì đây là lệnh điều khiển ASCII, nó hoạt động trong tất cả các shell.


1
Điều đó xóa màn hình nhưng vẫn giữ nguyên bộ đệm cuộn.
George

nó không giống nhau nếu bạn muốn sử dụng cmd + f cho ví dụ
bormat

7

Để chỉ xóa đầu ra cuối cùng:

+L

Để xóa hoàn toàn thiết bị đầu cuối:

+K


6

Lệnh + K sẽ xóa đầu ra trước đó

Để xóa văn bản đã nhập, trước tiên hãy nhảy sang trái với " Command + A " sau đó xóa văn bản sang bên phải của con trỏ bằng " Control + K ".

Ví dụ trực quan: nhập mô tả hình ảnh ở đây



5

Làm đúng, làm đúng!

Xóa dấu trước đó:Command-L

Xóa dấu trang trước:Option-Command-L

Xóa để bắt đầu: Command-K

Giúp các bạn!


1

Tôi không thể làm cho bất kỳ điều nào ở trên hoạt động (trên macOS).

Một sự kết hợp làm việc cho tôi -

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

Điều này xóa bộ đệm và màn hình


IO.write là gì? Tôi đã phải thay thế nó bằng printf để làm cho nó hoạt động. Dù sao cũng cảm ơn bạn. Cái này hoạt động tốt nhất với tôi
Fityu

1
Tôi không chắc tại sao tôi lại chọn IO.write. Nó sẽ hoạt động tương tự tuy nhiên bạn quyết định in các ký tự đó đến thiết bị đầu cuối.
Michael Baldry

1

Nhập nội dung sau vào thiết bị đầu cuối sẽ xóa lịch sử của bạn (nghĩa là sử dụng mũi tên lên sẽ không giúp bạn được gì) - nhưng sẽ không xóa màn hình:

history -c

Nó làm. @phil có xóa chúng vĩnh viễn khỏi đĩa không, hay chúng vẫn có thể truy xuất được bằng cách nào đó?
Steven Roose

Về cơ bản, nó sẽ xóa tệp ~ / .bash_history, vì vậy nếu bạn có thể khôi phục điều đó, bạn có thể khôi phục các lệnh đã bị xóa
Ryan Pendleton

Không, nó không hoạt động. Lịch sử cuộn lên vẫn còn tồn tại và tôi có thể cuộn lên để xem lại chúng.
Eonil

26
Không phải những gì đã được hỏi. Điều này xóa lịch sử, không phải bộ đệm hiện tại, đó là hai điều rất khác nhau.
Sean Cameron

1
Không phải những gì đã được hỏi, và có hại ; Tôi chỉ bị cắn bởi điều này, và lịch sử của tôi chứa đựng những thứ quan trọng.
Elazar

0

Hãy thử điều này, nếu bạn bị quá tải với đầu ra nếu bạn muốn có một bộ lọc

adb -d shell dumpsys hoạt động | grep ActivityRecord


-4

CMD + K dường như làm việc tất cả thời gian cho tôi.


2
Đây là câu trả lời giống như câu trả lời được chấp nhận 8 năm trước.
piksel bitworks
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.