Как очистить предыдущий вывод в Терминале в Mac OS X?

524

Я знаю clearкоманду, которая «очищает» текущий экран, но она делает это, просто печатая много новых строк - очищенное содержимое просто прокручивается вверх.

Есть ли способ полностью стереть весь предыдущий вывод с терминала, чтобы я не мог добраться до него даже при прокрутке вверх?

Eonil
источник
1
Вы когда-нибудь находили способ сделать это, который работает в сценарии оболочки?
Зев Айзенберг
7
@ZevEisenberg Я так не думаю. Во всяком случае, теперь я думаю, что мне это вообще не нужно. Я доволен Command+K.
Эонил
@ZevEisenberg мой обновленный ответ (и еще один ответ) показывает, как это сделать из сценария.
Алок Сингхал

Ответы:

1101

Чтобы очистить терминал вручную:

+K

Command+ Kдля новых клавиатур

Очистить терминал из скрипта оболочки;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
Алок Сингхал
источник
@fearless_fool apple.stackexchange.com/a/31887 может это сделать? Если да, пожалуйста, дайте мне знать!
Алок Сингхал,
Ну да, но смотрите ниже ( stackoverflow.com/a/26615036/558639 ) для лучшего пути в целом.
fearless_fool
9
Если вы случайно нажали эту кнопку, как можно было бы просмотреть очищенный буфер?
Джошуа Пинтер
4
@JoshPinter, просто не нажимай это случайно. :) (Рассмотрите возможность использования clearдля всех случаев, кроме случаев, когда вам нужна история прокрутки, чтобы фактически исчезнуть, например, когда вы собираетесь печатать.)
Wildcard
2
@ Wildcard Достаточно справедливо. :) Хороший совет по использованию clear. Я чувствую, что они должны быть полностью изменены, все же. Печатание clearкажется более намеренным, чем удар Command + K.
Джошуа Пинтер
85

Лучший способ очистить экран из скрипта ...

Если вы используете приложение OSX Terminal (как указано в OP), лучший подход (благодаря https://apple.stackexchange.com/a/113168 ) заключается в следующем:

clear && printf '\e[3J'

или более кратко (с подсказкой https://stackoverflow.com/users/4834046/qiuyi ):

printf '\33c\e[3J'

который очищает буфер прокрутки, а также экран. Есть и другие варианты, см. Https://apple.stackexchange.com/a/113168 для получения дополнительной информации.

оригинальный ответ

Ответ AppleScript, данный в этой теме, работает, НО у него есть неприятный побочный эффект очистки ЛЮБОГО окна терминала, которое оказывается активным. Это удивительно, если вы запускаете скрипт в одном окне и пытаетесь выполнить работу в другом!

Вы можете избежать этого, улучшив AppleScript, чтобы очистить экран только в том случае, если он находится на переднем крае. https://apple.stackexchange.com/a/31887 ):

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

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

fearless_fool
источник
1
Я использовал «лучший способ», .bash_profileи это здорово, потому что я больше не получаю сбойный буфер при открытии нового окна терминала.
Патрик Робертс
1
Это самый концептуально правильный ответ. Ответ qiuyi позволяет избежать &&, жертвуя небольшой читабельностью. Если бы ответ Алока мог быть расширен, чтобы очистить терминал, на котором выполняется текущий скрипт, это было бы улучшением, но это проще.
Зак Моррис
1
Это ваааааааааааа лучше для написания сценариев. Огромное спасибо!
Энди
Это идеально подходит для тех случаев, когда вы используете ssh'd для какой-либо другой системы, спасибо!
JBRWilkinson
48

Красивый способ printf '\33c\e[3J'

Qiuyi
источник
3
Это лучший способ. Мы должны определить псевдоним какalias cls='printf "\33c\e[3J"'
mpyw
Спасибо, это именно то, что мне было нужно.
GigaBass
Работает и в iTerm2
Андерс Зоммарин
1
@ LoïcFaure-Lacroix \33cвыполняет эквивалент clearкоманды, которая в основном просто прокручивает экран, пока вы не увидите его предыдущее содержимое. Он очищает экран, но не буфер обратной прокрутки (т.е. вы все еще можете использовать полосы прокрутки, чтобы увидеть старый вывод). Добавьте, \e[3Jчтобы фактически очистить буфер прокрутки назад.
Луис
@EirNym, добавить function cls { printf '\33c\e[3J\33c' }строку ~/.profile(или для всей системы /etc/profile). Это должно работать для настольных сред в macOS, FreeBSD, Linux и т. Д. Обратите внимание, что дополнительное \33cпредназначено для очистки лишнего \e[3Jлитерала в не-macOS (в основном для Linux / FreeBSD, нам нужно только printf '\33c').
вулкан ворон
33

Поместите это в ваш .bash_profile или .bashrc

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}
Роберт Симмонс младший
источник
Это должен быть правильный ответ. AppleScript может быть грязным, но, эй, выполняет свою работу. Спасибо.
allanberry
Был проголосовал, но другой ответ отмечает, что это очищает все окна!
Майкл Буш
20

В Mac OS X Terminal эта функциональность уже встроена в приложение терминала как View->Clear Scrollback(по умолчанию CMD+ K).

Таким образом, вы можете переназначить это как хотите с помощью сочетаний клавиш Apple. Просто добавьте новый ярлык для терминала с помощью команды «Очистить прокрутку». (Я использую CMD+ L, потому что это похоже на CTRL+, Lчтобы очистить текущее содержимое экрана, без очистки буфера.)

Не уверен, как бы вы использовали это в сценарии (может быть, AppleScript, как указали другие).

Приморский
источник
1
Начиная с Yosemite (10.10), View->Clear Scrollbackбольше нет в меню терминала. Сочетание клавиш CMD+ Kвсе еще работает, хотя.
Николас Миари
1
@NicolasMiari Похоже Clear Scrollback, только что перешел из Viewв Editв Йосемити.
BrainSteel
10

В Mac OS X Yosemite (10.10) используется Option + Command + Kдля очистки прокрутки в Terminal.app.

Дэвид Дж.
источник
9

Или вы можете отправить разрыв страницы (подача формы ASCII), нажав:

CTRL+L

Хотя технически это только запускает новую страницу, это имеет тот же сетевой эффект, что и все другие методы, хотя и намного быстрее (за исключением решения Apple + K, конечно).

И поскольку это команда управления ASCII, она работает во всех оболочках.

user2897962
источник
1
Это очищает экран, но оставляет буфер прокрутки нетронутым.
Джордж
это не то же самое, если вы хотите использовать cmd + f для
примера
7

Чтобы удалить только последний вывод:

+L

Чтобы очистить терминал полностью:

+K

Аман Джайн
источник
6

Command + K очистит предыдущий вывод

Чтобы очистить введенный текст, сначала прыгните влево с помощью « Command + A », затем очистите текст справа от указателя с помощью « Control + K ».

Наглядные примеры: введите описание изображения здесь

Punnerud
источник
5
clear && printf '\e[3J'

все очищает, хорошо работает и на osX. очень аккуратный

Дживджот Сингх Чхабда
источник
5

Делай правильно, делай правильно!

Очистить до предыдущей отметки:Command-L

Очистить до предыдущей закладки:Option-Command-L

Очистить, чтобы начать: Command-K

Помогите своим парням!

Макаллистер Боуман
источник
1

Я не мог заставить что-либо из вышеперечисленного работать (на macOS).

Комбинация сработала для меня -

IO.write "\e[H\e[2J\e[3J"

Это очищает буфер и экран

Майкл Балдри
источник
Что такое IO.write? Мне пришлось заменить его на printf, чтобы он заработал. Спасибо, в любом случае. Этот работает лучше всего для меня
Fitsyu
1
Я не уверен, почему я выбрал IO.write. Он должен работать так же, однако вы решили распечатать эти символы на терминале.
Майкл Балдри
1

Введя в терминал следующее, вы удалите свою историю (то есть стрелка вверх не даст вам ничего), но не очистит экран:

history -c
Фил
источник
Оно делает. @phil это удаляет их навсегда с диска, или они все еще могут быть найдены каким-то образом?
Стивен Руз
По сути, он удаляет файл ~ / .bash_history, поэтому, если вы можете это восстановить, вы можете восстановить очищенные команды
Райан Пендлтон
Нет, это не работает. Прокручиваемая история все еще существует, и я могу прокрутить вверх, чтобы увидеть их снова.
Эонил
27
Не то, что спросили. Это очищает историю, а не текущий буфер, а это две совершенно разные вещи.
Шон Кэмерон
1
Не то, что просили, а вредно ; Я был просто укушен этим, и моя история содержала важные вещи.
Элазар
0

Попробуйте это, если вы перегружены выводом, если вы хотите фильтр

Оболочка adb -d dumpsys активность | grep ActivityRecord

Срикумар
источник
-4

CMD + K, кажется, работает все время для меня.

CoeB
источник
2
Это тот же ответ, что и принятый 8 лет назад.
piksel bitworks