57

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

reset

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

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

12 ответов12

53

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

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

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

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

echo -e '\0033\0143'

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

printf '\033\143'
47

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

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

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

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

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

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

    • С tail GNU опция -F лучше, потому что она может продолжать следовать за файлом, даже когда на его месте появляется новый файл, как обычно для файлов журнала.
20

Просто чтобы дать технический ответ: 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"'

8

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

  • Konsole: Ctrl+Shift+K View → Очистить прокрутку и сброс
  • Терминал GNOME: Правка → Сброс и Очистка
  • PuTTY: Ctrl+щелчок правой кнопкой мыши → Очистить прокрутку

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

8

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

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

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

3
less -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'
3

В Mac OS X Terminal.app:

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

2

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

1

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

vidcontrol -C

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

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) ...
0

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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .