Xóa màn hình đầu cuối cho thật


382

Sử dụng clearlệnh trên thiết bị đầu cuối chỉ khiến người dùng nghĩ rằng màn hình đã bị xóa ... bạn vẫn có thể thấy đầu ra từ các lệnh trước đó khi bạn cuộn bằng chuột. Điều này làm cho cuộc sống khó khăn khi bạn đang chìm đắm trong một cơn sóng thần của văn bản.

Các giải pháp khác nhau (mã thoát, v.v.) có thể tìm thấy trên Internet chỉ là các biến thể của những gì lệnh rõ ràng đã làm.

Vậy làm thế nào để bạn xóa nội dung của một thiết bị đầu cuối trong Linux thực sự?


44
Tôi phân loại đây là "công cụ phần mềm thường được lập trình viên sử dụng" (được đề cập trong Câu hỏi thường gặp là hợp lệ).
Tự động hóa

5
Điều bạn thực sự hỏi là "Làm cách nào tôi có thể xóa bộ đệm cuộn lại của thiết bị đầu cuối?" độc lập với shell (Bash) hoặc Ubuntu.
Tạm dừng cho đến khi có thông báo mới.

@ spiderplant0 có lẽ vì AskUbfox là nơi thích hợp cho việc này - tại thời điểm này. Không tồn tại khi điều này được hỏi, vì vậy nó đã bị đóng ngoài chủ đề, mặc dù đó không phải là trường hợp.
jcollum

1
Đó là một câu hỏi chung chung hơn, ảnh hưởng đến không chỉ Ubuntu hay bash, như @Dennis lưu ý. Tôi sẽ thay đổi chủ đề "Xóa màn hình bash Ubuntu thành thật" -> "Xóa màn hình đầu cuối cho thật"
Ra_

Có nhiều loại thiết bị đầu cuối khác nhau mà bạn có thể chạy Bash (thuật ngữ " bash terminal " là vô nghĩa). "Xóa" không áp dụng cho tất cả chúng - đôi khi, phép tính gần đúng nhất là xé giấy và bin / shred / burn / phá hủy bit bạn không muốn.
Toby Speight

Câu trả lời:


500

Sử dụng lệnh sau để thực hiện một màn hình rõ ràng thay vì chỉ thêm các dòng mới ...

printf "\033c"

vâng, đó là một 'printf' trên dấu nhắc bash.

Bạn có thể sẽ muốn xác định một bí danh mặc dù ...

alias cls='printf "\033c"'

Giải trình

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

Vì vậy, đây <ESC>clà mã thoát VT100 để đặt lại thiết bị đầu cuối. Dưới đây là một số thông tin về mã thoát thiết bị đầu cuối.

Biên tập

Dưới đây là một vài cách khác để làm điều đó ...

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

Ở trên không hoạt động trên bảng điều khiển KDE (được gọi là Konsole) nhưng có hy vọng! Sử dụng chuỗi lệnh sau để xóa màn hình và bộ đệm cuộn lại ...

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

Hoặc có thể sử dụng bí danh sau trên KDE ...

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

Tôi đã nhận được lệnh xóa cuộn lại từ đây .


4
Đây thực sự là thiết bị đầu cuối cụ thể. "\033c"ESC cđó là thoát chuỗi VT-XXX "Full Reset (RIS)". Hầu như tất cả các thiết bị đầu cuối mọi người thực sự sử dụng những ngày này đều tương thích VT, nhưng nếu bạn thấy mình sử dụng một thiết bị đầu cuối kỳ lạ, điều này có thể không hoạt động. Câu trả lời của @ vpit3833 có nhiều khả năng hoạt động với giả định TERM được đặt chính xác.
Laurence Gonsalves

2
printflà một nội dung Bash (đúng là nó cũng là một nhị phân riêng biệt, nhưng các nội trang đã có trước và hầu hết các shell hiện đại đều có printf).
Tạm dừng cho đến khi có thông báo mới.

2
@ SDX2000 OK ... Tôi biết bạn đã chỉ định Ubuntu và tôi cho rằng những thứ này sẽ hoạt động tương tự trên tất cả các trình giả lập thiết bị đầu cuối "hiện đại". Ban đầu tôi đã thử nghiệm trên thiết bị đầu cuối MAC của mình và nó không thiết lập lại ở đó, nhưng nó đã thiết lập lại trên Centos Linux của tôi.
nhai

12
echo -en "\ 033c"
Jonathon Reinhart

2
$ 0,02 một vài năm sau đó, nhưng tôi là một sinh viên tại CU. Hỏi giáo sư hệ điều hành của tôi và ông nói đây là một ví dụ về chuỗi thoát ANSI: en.wikipedia.org/wiki/ANSI_escape_code Đây là một ví dụ về báo hiệu trong băng tần.
abgordon

216

Hãy thử reset. Nó xóa màn hình đầu cuối nhưng các lệnh trước đó có thể được truy cập thông qua mũi tên hoặc bất kỳ ràng buộc phím nào bạn có.


3
Cảm ơn! Nhưng nó xóa tất cả mọi thứ bao gồm cả dấu nhắc. Xem câu trả lời của tôi cho một giải pháp không làm điều này.
Tự động hóa

5
@ SDX2000 Cả hai xóa dấu nhắc, và sau đó trình bao tạo một cái mới. Một nhược điểm để thiết lập lại là dường như chậm hơn một chút (có lẽ vì nó không chỉ phát ra ESC c) mà còn dễ mang theo hơn.
Laurence Gonsalves

@Laurence cảm ơn vì đã làm rõ ... Tôi đã thử thiết lập lại nhưng quá chậm đến nỗi tôi cho rằng lời nhắc đã bị xóa cùng với mọi thứ khác. Tôi vẫn sẽ thích sử dụng ESC cvì có lẽ tôi sẽ không bao giờ sử dụng bất kỳ thiết bị đầu cuối nào ngoài thiết bị Ubuntu sử dụng. Mặc dù resetcó thể có ích vào một ngày nào đó khi tôi gỡ lỗi một máy từ xa thông qua cổng nối tiếp, v.v.
Tự động tìm kiếm vào

1
Thiết lập lại @ SDX2000 cũng thuận tiện cho những trường hợp thiết bị đầu cuối của bạn bị hỏng dữ liệu vì bạn đã giết một cái gì đó (hoặc bị loại một tệp nhị phân) và nó khiến thuật ngữ của bạn ở trạng thái bị sai lệch. Bạn đã bao giờ đi vào trạng thái nơi lời nhắc của bạn xuất hiện nhưng không phải là cách gõ của bạn và khi bạn nhấn enter, lời nhắc mới sẽ hiển thị bên cạnh lời nhắc trước đó thay vì bên dưới nó? thiết lập lại sửa lỗi đó. Đó thực sự là tất cả những gì tôi từng sử dụng cho ... Tôi chưa bao giờ có nhu cầu / mong muốn xóa bộ đệm cuộn lại của mình.
Laurence Gonsalves

4
Sự chậm trễ một giây liên quan đến resettôi là không thể chịu đựng được.
Jonathon Reinhart


7

Không có câu trả lời nào tôi đọc được làm việc trong PuTTY, vì vậy tôi đã tìm thấy một nhận xét về bài viết này :

Trong cài đặt cho kết nối của bạn, trong "Cửa sổ-> Hành vi", bạn sẽ tìm thấy cài đặt "Menu hệ thống xuất hiện trên ALT một mình". Sau đó, CTRL + L, ALT, l (đó là chữ L viết thường) sẽ cuộn màn hình và sau đó xóa bộ đệm cuộn lại.

(có liên quan đến OP vì tôi đang kết nối với máy chủ Ubuntu, nhưng rõ ràng cũng có liên quan cho dù máy chủ của bạn đang chạy gì.)


Một nhận xét 3 năm từ @Dennis Williamson đã đưa tôi đến câu trả lời này.
TecBrat

Ngoài ra, do cài đặt "Cửa sổ" của PuTTY, bạn đã kích hoạt "Menu hệ thống xuất hiện trên ALT-Space" , CTRL+Lsau đó bạn có thể nhanh chóng xóa cửa sổ đầu cuối sau đó đặt lại cuộn thực sự. ALT+SpaceU
Pierre Voisin

6

Liên kết sau đây sẽ giải thích cách làm cho bí danh đó vĩnh viễn để bạn không phải tiếp tục nhập nó.

https://askubfox.com/questions/17536/how-do-i-create-a-permanent-bash-alias

Đây là các bước chi tiết tại liên kết đó.

  1. vim ~ / .bashrc hoặc gedit ~ / .bashrc hoặc những gì bạn thích trình soạn thảo văn bản
  2. đặt bí danh cls = 'printf "\ 033c"' ở dưới cùng của tệp
  3. lưu và thoát
  4. . ~ / .bashrc (và vâng, nên có khoảng cách giữa. Và ~)
  5. Bây giờ hãy kiểm tra xem mọi thứ đã hoạt động chưa!

Tôi không có tín dụng cho thông tin này chỉ đi qua nó.



4

Lệnh thân thiện với con người của tôi cho việc này là:

reset

Đã thử nghiệm trên xterm và VT100. Nó cũng giúp sau khi chấm dứt chương trình bất thường. Giữ bộ đệm lệnh, vì vậy mũi tên lên sẽ quay vòng qua các lệnh trước đó.

chúc mừng: D


3

Tôi biết giải pháp sử dụng in các dòng mới không được hỗ trợ nhiều, nhưng nếu thất bại, tại sao không? Đặc biệt là khi một người đang hoạt động trong một môi trường mà người khác có khả năng có thể nhìn thấy màn hình, nhưng không thể keylog. Một giải pháp tiềm năng sau đó, là bí danh sau:

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

Sau đó, để "xóa" nội dung hiện tại của màn hình (hay đúng hơn là ẩn chúng), chỉ cần gõ c+Entervào thiết bị đầu cuối.


2

Chỉ cần thêm tmuxbộ đệm cuộn không rõ ràng với clear, resethoặc printf. Bạn cần phải :clear-history. Xem liên kết .


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

Cái này hoạt động trong Linux Machines


5
Mặc dù chúng tôi cảm ơn bạn vì câu trả lời của bạn, nhưng sẽ tốt hơn nếu nó cung cấp giá trị bổ sung trên đầu các câu trả lời khác. Trong trường hợp này, câu trả lời của bạn không cung cấp giá trị bổ sung, vì một người dùng khác đã đăng giải pháp đó. Nếu một câu trả lời trước đó hữu ích cho bạn, bạn nên bỏ phiếu thay vì lặp lại thông tin tương tự.
Toby Speight

-53

Biên dịch ứng dụng này.

#include <iostream>
#include <cstring>

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

33
Xin lỗi, nhưng đây không phải là giải pháp tốt nhất. Có nhiều phương pháp tốt hơn so với việc nhổ 999 dòng mới
pbfy0

2
Thực sự có một số giá trị này. Trong một số thiết bị đầu cuối, việc xóa màn hình bằng các phương pháp khác sẽ giết chết lịch sử và không cho phép bạn cuộn lại ... mặc dù với 999 dòng, ngón tay của tôi sẽ bị mỏi. Chàng trai tội nghiệp.
JoshuaDavid

@JoshuaDavid Toàn bộ vấn đề là OP không muốn có thể cuộn lại sau khi xóa.
Socowi

@Socowi Nhận xét của tôi đã giải quyết câu trả lời -50 kém này, không phải OP. Nhưng bạn nói đúng!
JoshuaDavid
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.