Как очистить предыдущий вывод в Терминале в Mac OS X? - PullRequest
453 голосов
/ 04 февраля 2010

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

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

Ответы [ 14 ]

953 голосов
/ 04 февраля 2010

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

+ K

Команда + K для более новых клавиатур

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

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
71 голосов
/ 28 октября 2014

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

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

clear && printf '\e[3J'

, который очищает буфер прокрутки. И это быстрее, чем запуск AppleScript. Есть и другие варианты, см. 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'

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

46 голосов
/ 26 апреля 2015

Симпатичный путь - printf '\33c\e[3J'

33 голосов
/ 22 февраля 2013

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

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}
19 голосов
/ 14 января 2014

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

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

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

10 голосов
/ 11 декабря 2014

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

8 голосов
/ 19 октября 2013

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

CTRL+L

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

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

5 голосов
/ 09 февраля 2017
clear && printf '\e[3J'

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

3 голосов
/ 08 февраля 2019

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

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

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

Очистить для начала: Command-K

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

3 голосов
/ 25 февраля 2010

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

history -c
...