Очистить экран терминала по-настоящему

382

Использование clearкоманды на терминале только вводит пользователя в заблуждение, что экран очищен ... вы все равно можете видеть результат предыдущих команд при прокрутке с помощью мыши. Это усложняет жизнь, когда вы тонете в цунами текста.

Различные решения (escape-код и т. Д.), Которые можно найти в Интернете, являются лишь вариациями того, что команда clear уже делает.

Итак, как вы реально очищаете содержимое терминала в Linux?

самоучка
источник
44
Я бы классифицировал это как «программные инструменты, обычно используемые программистами» (упомянутые в FAQ как действительные).
Автодидакт
5
На самом деле вы спрашиваете: «Как я могу очистить буфер обратной прокрутки терминала?» который не зависит от оболочки (Bash) или Ubuntu.
Приостановлено до дальнейшего уведомления.
@ spiderplant0, вероятно, потому что AskUbuntu - подходящее место для этого - в настоящее время. Когда этого не спросили, его не было, поэтому он был закрыт как не по теме, хотя это не так.
jcollum
1
Это более общий вопрос, затрагивающий не только Ubuntu или bash, как заметил @Dennis. Я бы поменял тему «Очистить экран Ubuntu для реального» -> «Очистить экран терминала для реального»
Ra_
Существует много разных типов терминалов, с которыми вы можете запускать Bash (термин « терминал bash » не имеет смысла). «Очистка» не применима ко всем из них - иногда, ближайшее приближение - порвать бумагу и положить / уничтожить / сжечь / уничтожить бит, который вам не нужен.
Тоби Спейт

Ответы:

500

Используйте следующую команду, чтобы очистить экран, а не просто добавлять новые строки ...

printf "\033c"

да, это «printf» в приглашении bash.

Возможно, вы захотите определить псевдоним, хотя ...

alias cls='printf "\033c"'

объяснение

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

Таким образом, это становится <ESC>cescape-кодом 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 cescape-последовательность VT-XXX для «полного сброса (RIS)». Почти все терминалы, которые люди фактически используют в настоящее время, совместимы с VT, но если вы когда-нибудь обнаружите, что используете странный терминал, это может не сработать. Ответ @ vpit3833, скорее всего, сработает, если TERM установлен правильно.
Лоуренс Гонсалвес
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 Это пример внутриполосной сигнализации.
Абгордон
217

Попробуй reset. Он очищает экран терминала, но предыдущие команды могут быть доступны через стрелку или любую другую привязку клавиш.

vpit3833
источник
3
Спасибо! Но это очищает все, включая подсказку. Смотрите мой ответ для решения, которое не делает этого.
Автодидакт
5
@ SDX2000 Обе команды очищают подсказку, а затем оболочка создает новую. Единственный недостаток сброса состоит в том, что он кажется немного медленнее (вероятно, потому что он делает больше, чем просто излучает ESC c), но он более переносим.
Лоуренс Гонсалвес
@Laurence спасибо за разъяснения ... Я попытался сбросить, но это было так медленно, что я предположил, что подсказка была очищена вместе со всем остальным. Я все еще предпочитаю использовать, ESC cтак как я, вероятно, никогда не буду использовать какой-либо терминал, кроме того, который использует Ubuntu. Хотя это resetможет пригодиться когда-нибудь, когда я отлаживаю удаленную машину через последовательный порт и т. Д.
Autodidact
1
@ Сброс SDX2000 также удобен в тех случаях, когда ваш терминал плохо работает, потому что вы что-то убили (или перехватили двоичный файл), и он оставил ваш термин в искаженном состоянии. Вы когда-нибудь входили в состояние, в котором отображается ваше приглашение, но не печатается, и когда вы нажимаете Enter, новое приглашение появляется рядом с предыдущим, а не под ним? сброс исправляет это. Это фактически все, для чего я когда-либо использовал это ... У меня никогда не было необходимости / желания очищать свой буфер обратной прокрутки.
Лоуренс Гонсалвес
4
Задержка в одну секунду resetдля меня невыносима.
Джонатон Рейнхарт
62
tput reset

Это сделает свое дело!

Сообщество
источник
2
Выполняется намного быстрее, чем обычный reset, но все же выполняет свою работу!
Ponkadoodle
1
Быстрее, чем просто reset
l2aelba
Это не всегда резать, но tput Клир сделал
взаимосвязанной
7

Ни один из ответов, которые я прочитал, не работал в PuTTY, поэтому я нашел комментарий к этой статье :

В настройках вашего соединения в разделе «Окно-> Поведение» вы найдете параметр «Системное меню появляется только на ALT». Затем CTRL + L, ALT, l (это строчная буква L) прокрутит экран и затем очистит буфер прокрутки.

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

TecBrat
источник
3-летний комментарий от @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. Теперь проверьте, все ли работает!

Я не принимаю кредит на эту информацию, просто передавая ее.

N1mr0d
источник
4

С KDE и Ubuntu 12.04 LTS и терминалом «Konsole» ни один из опубликованных ответов не работает. Однако нажатие сочетания клавиш по умолчанию CTRL + Shift + X работает! Источник:

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

The111
источник
3
Это было изменено на CTRL + Shift + K в более поздних версиях KDE: bugs.kde.org/show_bug.cgi?id=282593
Оптимизированный кодер
4

Моя любимая дружелюбная команда для этого:

reset

Проверено на xterm и VT100. Это также помогает после ненормального завершения программы. Сохраняет буфер команд, поэтому стрелка вверх будет переключаться между предыдущими командами.

ура: D

elbedoit
источник
3

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

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

Затем, чтобы «убрать» текущее содержимое экрана (или, скорее, скрыть его), просто введите c+Enterв терминале.

nemesisfixx
источник
2

Просто, чтобы добавить этот tmuxбуфер прокрутки не очистить clear, resetили printf. Тебе нужно :clear-history. Смотрите ссылку .

theaws.blog
источник
-2
echo -e "\e[3J"

Это работает в Linux Machines

Nithin
источник
5
Хотя мы благодарим вас за ваш ответ, было бы лучше, если бы он предоставил дополнительную ценность поверх других ответов. В этом случае ваш ответ не дает дополнительной ценности, поскольку другой пользователь уже опубликовал это решение. Если предыдущий ответ был вам полезен, вы должны проголосовать за него, а не повторять ту же информацию.
Тоби Спейт
-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
новых
2
Там на самом деле есть некоторая ценность для этого. В некоторых терминалах очистка экрана другими методами убьет историю и не позволит вам прокрутить назад ... хотя при 999 строках мой палец устает. Бедный парень.
Джошуа Дэвид
@JoshuaDavid Суть вопроса заключалась в том, что OP не хотел иметь возможность прокручивать назад после очистки.
Socowi
@Socowi Мой комментарий был адресован этому -50 плохо оцененному ответу, а не ОП. Но ты прав!
Джошуа Дэвид