Які команди можна використовувати для скидання та очищення терміналу?


64

Я використовую команду:

reset

щоб очистити мій термінал. Хоча я майже впевнений, що це не те, що я повинен робити. Скидання, як випливає з назви, скидає весь термінал (змінює багато матеріалів). Ось що я хочу:

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


мабуть, існує велика плутанина щодо того, що саме тут задають питання. чи можете ви взагалі уточнити питання? що саме ви намагаєтеся виконати, очистивши буфер прокрутки терміналу? (якщо так, то яку термінальну програму ви використовуєте?)
перехвилюватися кіхот

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 відлуння не приймає -e, тож ви можете спробувати:

printf '\033\143'

Я використовую xterm. Однак я не розумію, що ти маєш на увазі. Чи слід буквально набирати текст echo ESC-c?
шістдесят футів

2
@sixtyfootersdude: Ні, не буквально ESC. Читайте статті "Евакуаційний символ" та "Контрольний символ" у Вікіпедії - ESCчасто використовується для позначення символу ASCII 0x1B, який ви можете вставити, натиснувши ^Vдалі Esc.
grawity

1
Ви не повинні. Якщо ваше рішення передбачає запис необроблених термінальних послідовностей виходу, слід переосмислити рішення. Я б використав "менше" замість кота. Якщо ви дійсно хочете дізнатися про "послідовності втечі терміналу", Google може вам допомогти.
Крейг

2
@HaraldNordgren краще використовувати більш стандартний printf, ніж echo -e.
Гарна людина

3
Чому \0143замість c?
ruakh

51

Використовуйте правильний інструмент для кожної роботи:

  • Використовуйте clearдля очищення вікна терміналу.

  • Використовуйте resetдля скидання вашого терміналу, коли він заплутається за допомогою контрольних послідовностей.

  • Використовуйте catлише тоді, коли ви хочете безперебійно передавати цілу кількість даних з одного місця в інше .

  • Використовуйте програму пейджера, наприклад, lessабо mostдля перегляду сторінок виводу.

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

    • Для GNU tailця -Fможливість краща, оскільки вона може продовжувати слідкувати за файлом навіть тоді, коли на його місці з’являється новий файл, як це властиво файлам журналів.

14
Це насправді не відповідає на моє запитання.
шістдесят футів

7
Так, це так. Не котять файли, щоб їх читати, файли котів, щоб об'єднати їх. Використовуйте менше чи більше для читання файлів - тоді у вас не буде тієї самої проблеми.
Річ Бредшоу

Подивіться на "марне використання кота"
галоа

Багато людей виступають проти використання catчитання будь-чого, але для невеликих файлів це насправді має більше сенсу, catа не використання less. Після того, як файл викидається на термінал, ви можете шукати / прокручувати назад до файлу так часто, як вам захочеться, замість того, щоб виходити з нього, lessперш ніж робити щось інше.
GKFX

22

Просто для надання технічної відповіді: resetповторно ініціалізуйте термінал так, ніби він був знову відкритий з нуля. stty saneзробить багато того ж функціоналу (без скидання). Це те саме, що і ^L(Ctrl + L) (irrc), і tput clear. Незважаючи на те, що сказано в попередньому плакаті (@grawity), clearне з'являється купа нових рядків. Він надсилає TERMскидання 's, як визначено в, 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 та на базі VTE, але не в PuTTY та Konsole.) Він також не хоче використовувати reset, оскільки він скидає більше, ніж хоче. (Я не знаю, який термінал він використовує - але порівняйте sttyдо і після скидання.)
grawity

2
як я вже сказав, він, ймовірно, хоче tput reset, який посилає сигнал терміналу до терміналу - без фактичної реініціалізації терміна. "скидання - замість виведення рядків ініціалізації, якщо вони є, рядки скидання термінала будуть виведені (rs1, rs2, rs3, rf). Якщо рядків скидання немає, але є рядки ініціалізації, виведені рядки ініціалізації. В іншому випадку скидання діє так само, як init. " Тут ми скинули рядки, щоб рядки init не виконувалися.
Еван Керролл

+1: проте пропозиція tput resetє досить повільною (як і reset). printf '\033\143'набагато швидше. Чи є причина, чому метод printf небезпечний / поганий?
шістдесят футів

9

Інший термінал - iTerm2, і він має дещо дивну послідовність втечі, що використовується для очищення прокрутки. У оболонці 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

Мабуть, найкращим способом очищення всього є використання функції терміналу:

  • Консоль: Ctrl+ Shift+ KПерегляд → Очистити прокрутку та скидання
  • Термінал GNOME: Редагування → Скидання та очищення
  • PuTTY: Ctrl+ right-click→ Очистити прокрутку

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


Хм, я не маю цього під своїм гномом ...
шістдесят футів

@sixtyfootersdude: Я впевнений, що він є , я просто не знаю точного меню (наразі не можу використовувати gnome-terminalсебе) ... Погляньте на "Інструменти" та інші меню.
grawity

У xterm його ctrl-середня кнопка -> "скидання та очищення збережених ліній"
Крейг,

3
менше -W + F foo.log

+Fє для "follow", подібно до, tail -fале дозволяє також прокручувати назад.

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


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

perl -e 'друкувати "\ n" x512;'

xterm -e 'хвіст -f foo.log'

3

На Mac OS X Terminal.app:

Перегляд -> Очистити прокрутку (або command- K)


@Rohit Якщо питання стосувалося спеціально Mac OS X Terminal.app, то так, це чудова відповідь. Однак оригінальне питання неоднозначне, як я краще можу сказати, щодо того, який термінал і ОС грають.
Девід Дж.

2

Це не проблема "Баша". Це залежить від терміналу, який ви використовуєте. Наприклад, я використовую "iterm2" з macbook для підключення віддаленої машини Linux. Ви можете використовувати "команду + K" для очищення буфера, або в меню виберіть "Редагувати" -> "Очистити буфер".


1

Щоб очистити екран консолі та буфер прокрутки під час запуску PuTTY, для мене це працює:

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

Це фактично 2 послідовності "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).

Введення тексту:

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

Якщо ви хочете бути впевнені, що ви переглядаєте останні записи в файлі журналу, можливо, краще використовувати хвіст замість clear/ catякий я припускаю, що ви використовуєте.


Насправді я використовую хвости -f (суцільні журнали), однак, оскільки вони час від часу виплетають тисячі рядків, важливо мати прокрутку назад. Однак було б непогано знати, що я не знущаюся до старого журналу.
шістдесят футів

0

Хммм. Гадаю, якщо ти працюєш консоле, то тебе не пощастить. Раніше ви могли просто "очистити прокрутку". Консоле вже не дозволить вам це робити. Ви також повинні скинути його, і це вбиває будь-яку програму, яку ви працювали. Я думаю, мені потрібна нова термінальна програма ......

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.