Какие команды я могу использовать для сброса и очистки моего терминала?

64

Я использовал команду:

reset

очистить мой терминал. Хотя я уверен, что это не то, чем я должен заниматься. Сброс, как следует из названия, сбрасывает весь ваш терминал (меняет много вещей). Вот что я хочу:

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

sixtyfootersdude
источник
кажется, что существует много путаницы в том, что именно здесь спрашивают. Вы можете уточнить вопрос вообще? Что именно вы пытаетесь достичь, очистив свой буфер обратной прокрутки терминала? (если так, какое терминальное приложение вы используете?)
Quack Quixote
1
Ctrl-L очистит экран в bash (в режиме emacs, который по умолчанию), аналогично выполнению программы очистки.
Только что проверил это в терминале bash в IntelliJ IDE. Работает нормально и очищает прокрутку, что именно то, что я хотел. Благодарю.
Ян Льюис
Я знаю, что на это ответили до смерти, но я думаю, что вы хотите clear && printf '\033[3J'. Нет сброса терминала, просто очистка текста на экране. Смотрите этот пост: superuser.com/questions/555554/…
jwd

Ответы:

57

Буфер обратной прокрутки является не функцией bash, а программой терминала. Вы не сказали, какой терминал вы используете.

Если вы используете xterm, вы можете очистить сохраненные строки, передав ESC-c на терминал.

Это может или не может работать на любой терминальной программе, которую вы используете.

На Linux это, вероятно, будет работать:

echo -e '\0033\0143'

на FreeBSD echo не принимает -e, поэтому вы можете попробовать:

printf '\033\143'
Craig
источник
Я использую Xterm. Однако я не понимаю, что вы имеете в виду. Должен ли я буквально печатать echo ESC-c?
sixtyfootersdude
2
@sixtyfootersdude: Нет, не буквальный ESC. Прочитайте статьи «Escape-символ» и «Control-символ» в Википедии - ESCчасто используется для обозначения ASCII-символа 0x1B, который можно вставить, нажав, ^Vа затем кнопку Esc.
Гравитация
1
Ты не должен. Если ваше решение предполагает написание исходных escape-последовательностей терминала, вам следует переосмыслить решение. Я бы использовал «меньше» вместо кошки. Если вы действительно хотите узнать о «escape-последовательностях терминала», Google может помочь вам.
Крейг,
2
@HaraldNordgren лучше использовать более стандартный printf, чем echo -e.
Хороший человек
3
Почему \0143вместо c?
Руах
51

Используйте правильный инструмент для каждой работы:

  • Используйте clearдля очистки окна терминала.

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

  • Используйте catтолько в том случае, если вы хотите непрерывно передавать поток данных из одного места в другое .

  • Используйте программу пейджера, например, lessили, mostчтобы просмотреть страницы вывода.

  • Используйте tail -f /var/log/foo.log /var/log/bar.logдля просмотра нескольких разных файлов журнала.

    • С GNU tailэтот -Fвариант лучше, потому что он может продолжать следовать за файлом, даже когда на его месте появляется новый файл, как это обычно происходит с файлами журналов.
большой нос
источник
14
Это на самом деле не отвечает на мой вопрос.
sixtyfootersdude
7
Да, это так. Не катайтесь файлы, чтобы прочитать их, кошачьи файлы, чтобы объединить их. Используйте меньше или больше для чтения файлов - тогда у вас нет такой же проблемы.
Рич Брэдшоу
Посмотрите "бесполезное использование кошки"
Галуа
Многие люди выступают против использования catчего-либо для чтения, но для небольших файлов это действительно имеет для catних больше смысла , чем использование less. После того, как файл был выгружен в терминал, вы можете просматривать / прокручивать файл обратно так часто, как вам хочется, вместо того, чтобы выполнять его, lessпрежде чем делать что-либо еще.
GKFX
23

Просто чтобы дать технический ответ: resetпереинициализировать терминал, как будто он был открыт с нуля. stty saneбудет делать много той же функциональности (без сброса). Это то же самое, что ^L(Ctrl + L) (irrc) и tput clear. Несмотря на то, что сказал предыдущий постер (@grawity), clearне выводит кучу новых строк. Он отправляет TERMсброс, как определено в, terminfoили termcap, для меня, используя gnome-terminal(xterm), он такой же, как команда perl -e'print "\33[H\33[2J"'.

Если вы хотите просто очистить буфер - по сравнению с перезагрузкой всего терминала, попробуйте это tput reset. Это должно быть очень быстро и делать то, что вы хотите. (Хотя вы действительно должны читать файлы с less)

tput reset, отправляет значение terminfo для сброса - на моем терминале (xterm) оно совпадает с perl -e'print "\33c"'

Эван Кэрролл
источник
1
Я не сказал, clearвыводит кучу новых строк. Я просто предоставил команду в качестве альтернативы , потому что clearочищает только экран, но не буфер с прокруткой. (Не в PuTTY или Konsole, по крайней мере.)
grawity
1
Именно по этой причине печать набора новых строк на самом деле не является альтернативой очистке - вы не представляете, что терминал будет делать с чистым сигналом. Лучше просто сообщить новым людям, что у вас есть база данных, которая знает, как обращаться с вашим терминалом, у нее есть два значения ключа, одно из которых отображается clearкак имя сигнала в сигнал, а другое reset- в сигнал - и только последняя. приводит к очищенному буферу обратной прокрутки. resetотправляет последнее, прежде чем делать другие забавные вещи.
Эван Кэрролл
1
По первоначальному вопросу sixtyfootersdude, в clearэто не сбросить его скроллинга. ( ESC cработает в xtermVTE и на основе, но не в PuTTY и Konsole.) Он также не хочет использовать reset, поскольку он сбрасывает больше, чем он хочет. (Я не знаю, каким терминалом он пользуется - но сравните sttyдо и после сброса.)
grawity
2
как я уже сказал, он, вероятно, хочет tput reset, который отправляет сигнал сброса на терминал - без фактической повторной инициализации термина. "reset - вместо вывода строк инициализации будут выведены строки сброса терминала, если они есть (rs1, rs2, rs3, rf). Если строки сброса отсутствуют, но есть строки инициализации, будут выведены строки инициализации. В противном случае сброс действует идентично init. " Здесь мы сбросили строки, чтобы строки инициализации не запускались.
Эван Кэрролл
+1: для предложения, однако tput reset, довольно медленно (так же, как reset). printf '\033\143'намного быстрее Есть ли причина, по которой метод printf опасен / плох?
sixtyfootersdude
9

Еще один терминал - iTerm2, и у него есть несколько странная escape-последовательность, используемая для очистки прокрутки. В оболочке Bash я использую что-то вроде:

echo -ne '\033]50;ClearScrollback\a'

в сценарии. Так что в основном это символ ESC, за которым следует « ]50;ClearScrollback», а затем символ BEL.

Сэм Мейсон
источник
1
CMD + K работает в iTerm2. CTRL + K работает во многих других.
blockloop
Мне нравится это решение, потому что оно позволяет мне очищать буфер прокрутки iTerm2 из сценария оболочки, когда такие вещи нравятся clearи resetне будут. Однако это не самый лучший ответ на вопрос. Я думаю, что правильным ответом для этого случая будет то, что предлагает терминальное приложение, например команда -K в iTerm2, control-K в других и т. Д.
LS
8

Вероятно, лучший способ очистить все это использовать функцию терминала:

  • Konsole: Ctrl+ Shift+ KВид → Очистить прокрутку и сброс
  • Терминал GNOME: Правка → Сброс и Очистка
  • PuTTY: Ctrl+ right-click→ Очистить прокрутку

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

grawity
источник
Хм, у меня этого нет под моим гномом ...
sixtyfootersdude
@sixtyfootersdude: Я уверен, что это там, я просто не знаю точное меню (не могу использовать gnome-terminalсебя в настоящее время) ... Посмотрите на "Инструменты" и другие меню.
grawity
В xterm его ctrl-средняя кнопка -> «сбросить и очистить сохраненные строки»
Крейг,
3
меньше -W + F foo.log

+Fдля "следовать", аналогично, tail -fно позволяет вам также прокручивать назад.

Все терминалы на основе vte (GNOME, Xfce, Roxterm) и KDE Konsole позволяют использовать колесо прокрутки для прокрутки внутри less. Я нахожу это вполне уместным.


Альтернатива clear:

perl -e 'print "\ n" x512;'

xterm -e 'tail -f foo.log'
grawity
источник
3

В Mac OS X Terminal.app:

Вид -> Очистить прокрутку (или command- K)

acajaja
источник
@Rohit Если вопрос был конкретно о Mac OS X Terminal.app, то да, это отличный ответ. Однако оригинальный вопрос, насколько я могу судить, неоднозначен в отношении того, какой терминал и ОС находятся в игре.
Дэвид Дж.
2

Это не проблема "Баш". Это зависит от используемого вами терминала. Например, я использую «iterm2» с macbook для подключения удаленной машины linux. Вы можете использовать «command + K» для очистки буфера или в меню выбрать «Edit» -> «Clear Buffer».

Стивен Хуанг
источник
1

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

echo -en "\ec\e[3J"

На самом деле это две последовательности «Esc», которые действуют независимо ... их можно использовать в любом порядке:

# clears the console screen, but not the scrollback buffer
# this is actually the escape code to "reset" the terminal
echo -en "\ec"

# clears the scrollback buffer, but not the console screen
# screen content remains, and cursor position remains at its last position
echo -en "\e[3J"

Использование echo -en "\ec"сброса терминала может изменить некоторые другие настройки терминала. Вместо «Сброс» вы можете сделать это:

# position the cursor to "Home" (Top Row, First Column)
echo -en "\e[H"

# Erase down: clear the screen from the cursor down to the bottom of the screen.
echo -en "\e[J"

# Note: this is supposed to clear the screen and position the cursor to home,
# but it didn't work like that for me. It cleared the entire screen (above and 
# below the cursor), but left the cursor at its last position.
echo -en "\e[2J"

# putting everything together
echo -en "\e[H\e[J\e[3J"

Вы можете поместить это в сценарий оболочки, и он работает просто отлично.


В случае, если есть некоторые системные зависимости:

Я использую PuTTY Connection Manager (версия 0.7.1 BETA (сборка 136)) с PuTTY (версия 0.60).

Typing:

echo \"$TERM\"; /bin/sh --version

доклады:

"xterm"
GNU bash, version 4.1.2(1)-release-(x86_64-redhat-linux-gnu) ...
Кевин Феган
источник
1

Чтобы очистить экранный буфер для аппаратного TTY во FreeBSD, вы можете использовать «vidcontrol - утилиту управления и настройки системной консоли» с параметром -C Очистить буфер истории.

vidcontrol -C

команда очистит весь экранный буфер для текущей консоли выше того, что вы видите в данный момент. Возможно, вы захотите сначала «очистить», или нет - до вас.

пользователь
источник
0

Если вы хотите быть уверены, что просматриваете самые последние записи в файле журнала, то, вероятно, лучше использовать tail вместо clear/, catкоторый, я полагаю, вы используете.

Джош К
источник
На самом деле я использую tail -f (непрерывные журналы), однако, поскольку они иногда выплевывают тысячи строк, важно иметь прокрутку назад. Однако было бы неплохо знать, что я не хмуруюсь назад к старому журналу.
sixtyfootersdude
0

Хммм. Я полагаю, если вы используете консоль, вам не повезло. Раньше вы могли просто «очистить прокрутку». Konsole не позволит вам сделать это больше. Вы должны сбросить его тоже, чтобы он убил любую программу, которую вы запускали. Я думаю, мне нужна новая терминальная программа ......

Брюс
источник