Очистіть екран терміналу для реального


382

Використання clearкоманди на терміналі лише обманює користувача на думку, що екран очищений ... Ви все ще можете побачити вихідні дані з попередніх команд при прокручуванні за допомогою миші. Це ускладнює життя, коли ви тонете в цунамі тексту.

Різні рішення (код виходу тощо), які можна знайти в Інтернеті, є лише варіаціями того, що вже робить чітка команда.

Тож як ви очистите вміст терміналу в Linux справжній?


44
Я б класифікував це як "програмні засоби, які зазвичай використовуються програмістами" (згадується в FAQ як дійсний).
Автододаток

5
Що ви насправді запитуєте: "Як я можу очистити буфер прокрутки термінала?" який не залежить від оболонки (Bash) або Ubuntu.
Призупинено до подальшого повідомлення.

@ spiderplant0, ймовірно, тому, що AskUbuntu - це правильне місце для цього - наразі. Не існувало, коли про це запитували, тому він закрився як поза темою, хоча це не так.
jcollum

1
Це більш загальне питання, яке стосується не лише Ubuntu чи bash, як зазначав @Dennis. Я змінив би тему "Очистити екран реальної
версії

Існує багато різних типів терміналів, за допомогою яких можна запустити Bash (термін " bash terminal " безглуздо). "Очищення" застосовується не до всіх - іноді найближчим наближенням є розірвання паперу та бін / подрібнення / спалювання / знищення біт, який ви не хочете.
Toby Speight

Відповіді:


500

Використовуйте наступну команду, щоб зробити прозорий екран, а не просто додавати нові рядки ...

printf "\033c"

так, це 'printf' на підказці bash.

Ви, ймовірно, захочете визначити псевдонім, хоча ...

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 для "Повного скидання (RIS)". Майже всі термінали, якими користуються фактично користувачі, є сумісними з VT, але якщо ви коли-небудь опинитесь на дивному терміналі, це може не спрацювати. @ vpit3833 відповідь швидше спрацює, якщо термін встановлений правильно.
Лоранс Гонсальвес

2
printfце вбудований Bash (правда, це також окремий двійковий, але вбудовані мають пріоритет і більшість сучасних оболонок printf).
Призупинено до подальшого повідомлення.

2
@ SDX2000 ОК ... Я знаю, що ви вказали Ubuntu, і я припускав, що вони будуть вести себе подібними на всіх "сучасних" термінальних емуляторах. Я спочатку тестував термінал свого MAC, і він не скидався, але він змінився на моєму Centos Linux.
nhed

12
echo -en "\ 033c"
Джонатан Райнхарт

2
0,02 долара через кілька років, але я студент CU. Запитав мого професора операційних систем, і він сказав, що це приклад послідовності аварійної відмови ANSI: en.wikipedia.org/wiki/ANSI_escape_code Це приклад внутрішньодіапазонної сигналізації.
abgordon

216

Спробуйте reset. Він очищає екран терміналу, але до попередніх команд можна отримати доступ стрілкою або залежно від клавіші.


3
Дякую! Але це очищує кожну річ, включаючи підказку. Дивіться мою відповідь щодо рішення, яке цього не робить.
Автододаток

5
@ SDX2000 Обидва очищають запит, і тоді оболонка генерує новий. Єдиним недоліком для скидання є те, що він здається трохи повільнішим (можливо, тому що він більше, ніж просто випромінює ESC c), але він більш портативний.
Лоранс Гонсальвес

@Laurence спасибі за роз’яснення ... Я спробував скинути, але це було так повільно, що я припустив, що підказка буде очищена разом із усім іншим. Я все одно віддаю перевагу використовувати, ESC cоскільки я, мабуть, ніколи не буду використовувати жоден термінал, окрім того, який використовує Ubuntu. Хоча це resetможе бути корисним колись, коли я налагоджую віддалену машину через послідовний порт тощо.
Автозавдання

1
@ SDX2000 скидання також зручно для тих випадків, коли ваш термінал сильно заблукав, тому що ви щось убили (або запустили двійковий файл), і він залишив ваш термін у виснаженому стані. Ви коли-небудь переходите до стану, коли відображається ваше підказка, але не друкується, і коли ви натискаєте, введіть нове вікно відображається поруч із попереднім запитом, а не під ним? скидання виправляє це. Це власне все, що я коли-небудь використовую для цього ... У мене ніколи не було потреби / бажання очищати буфер прокрутки.
Лоранс Гонсальвес

4
Односекундна затримка, пов’язана з reset, для мене нестерпна.
Джонатан Райнхарт

62
tput reset

Це зробить трюк!


2
Виконує набагато швидше, ніж просто reset, але все-таки виконує роботу!
Ponkadoodle

1
Швидше, ніж просто reset
l2aelba

Це не завжди вирізало це, але tput ясно це зробив
InterLinked

7

Жодна з прочитаних відповідей не працювала в PuTTY, тому я знайшов коментар до цієї статті :

У налаштуваннях для вашого з'єднання в розділі "Вікно-> Поведінка" ви знайдете налаштування "Системне меню відображається лише на ALT". Тоді CTRL + L, ALT, l (це нижній регістр L) прокручує екран і очищає буфер прокрутки.

(стосується ОП, оскільки я підключаюсь до сервера Ubuntu, але також, мабуть, є релевантним незалежно від того, на якому сервері працює.)


Трирічний коментар від @Dennis Williamson привів мене до цієї відповіді.
TecBrat

Крім того , з огляду на , що в настройках «вікна» PuTTY ви активували «з'являється меню системи на ALT-Space» ви можете швидко зробити CTRL+Lте ALT+Space, Uщо першим очищає вікно терміналу потім скидає скролінг для реального.
П’єр Войсін

6

Наступне посилання пояснить, як зробити цей псевдонім постійним, щоб вам не потрібно було постійно вводити його.

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

Це кроки, детально описані за цим посиланням.

  1. vim ~ / .bashrc або gedit ~ / .bashrc або будь-який текстовий редактор, який вам подобається
  2. помістіть псевдонім 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
Оптимізований кодер

4

Моя улюблена людська команда для цього:

reset

Тестували на xterm та VT100. Це також допомагає після ненормального припинення програми. Зберігає буфер команд, тому стрілка вгору буде проходити через попередні команди.

ура: D


3

Я знаю, що рішення, що використовує друк нових рядків, не дуже підтримується, але якщо все інше не вдається, чому б і ні? Тим більше, коли хтось працює в середовищі, коли хтось інший, ймовірно, зможе побачити екран, але ще не в змозі зробити керований журнал. Одним з можливих рішень є наступний псевдонім:

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
Вибачте, але це не найкраще рішення. Є кращі методи, ніж
вимовляння

2
У цьому насправді є якась цінність. У деяких терміналах очищення екрана іншими методами знищить історію і не дозволить прокрутити назад ... хоча з 999 рядками мій палець втомиться. Бідний хлопець.
ДжошуаДавид

@JoshuaDavid Вся суть питання полягала в тому, що ОП не хотів мати змогу прокручуватися назад після очищення.
Socowi

@Socowi Мій коментар стосувався цієї відповіді -50 з низькою оцінкою, а не ОП. Але ти маєш рацію!
ДжошуаДавид
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.