Почему эти символы записываются в терминал во время очистки?

Я недавно сделал clear на моем терминале и обнаружил, что следующие строки были напечатаны в строке выше:

[unknown character]3;J

Я сделал clear | hexdump чтобы посмотреть на это и обнаружил, что были напечатаны следующие символы:

ESC [ 3 ; J ESC [ H ESC [ 2 J

Я попытался ввести эти ключи в свой терминал, и я заметил, что, хотя экран не очищается, появился только первый J. Это ошибка в терминале?

1 ответ

Решение

Это то, что известно как "последовательность ESCape", и это последовательность символов, используемая, чтобы сообщить стеклянному нажатию клавиши, что эмулирует сеанс вашего терминала (в соответствии с вашим $TERM переменная окружения) для "очистки экрана".

ESC [ 3 ; J ESC [ H ESC [ 2 J выбирается в зависимости от стоимости вашего TERM переменная окружения. (echo $TERM). Если $TERM не соответствует типу терминала, который вы используете, clear выберет неправильную строку.

Какой твой $TERM? Что за терминал?

Например, я набираю в терминале Gnome (Ctrl Alt T на моем графическом логине Ubuntu 14.04) и

$ echo $TERM
xterm-color
$ clear | od -bc
0000000 033 133 110 033 133 062 112
        033   [   H 033   [   2   J
0000007
$ clear

очищает мой экран молча.

Когда я вошел в сеанс Ctrl Alt F1, мой $TERM начинается как "linux"и установлен в xterm-color по моим ~/.bashrc

Начать с чтения man tput;man terminfoи прочитайте man страницы, упомянутые в их SEE ALSO разделы.

Другие вопросы по тегам