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

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

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

Так как же очистить содержимое терминала в Linux по-настоящему?

12 ответов

Решение

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

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"'

Я получил команду очистки прокрутки отсюда.

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

tput reset

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

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

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

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

  1. Очистите видимый экран

             clear 
    
  2. Очистить экран и очистить буфер

             clear && clear 
    
  3. Чистый и 1-секундная задержка

             reset
    
  4. Очистить без задержки в 1 секунду

             tput reset
    

Следующая ссылка объяснит, как сделать этот псевдоним постоянным, чтобы вам не приходилось вводить его повторно.

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

Эти шаги подробно описаны по этой ссылке.

  1. vim ~ /.bashrc или gedit ~/.bashrc или любой другой текстовый редактор, который вам нравится
  2. поместите псевдоним cls='printf "\033c"' внизу файла
  3. Сохранить и выйти
  4. , ~/.bashrc (и да, между. и ~ должен быть пробел)
  5. Теперь проверьте, все ли работает!

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

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

reset

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

ура:D

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

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

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

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

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

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

echo -e "\e[3J"

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

Скомпилируйте это приложение.

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}
Другие вопросы по тегам