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


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

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

11 398

11 ответов:

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

+K

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

чтобы очистить терминал из сценария оболочки;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'

лучшую сторону...

если вы используете приложение 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'

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

красивый способ-это printf 'c\e[3J'

положите это в свой .bash_profile или .bashrc

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}

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

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

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

С Mac OS X Yosemite (10.10) используйте Option + Command + K очистить журнал в терминале.приложение.

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

CTRL+L

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

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

clear && printf '\e[3J'

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

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

history -c

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

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

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

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

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