Почему эти символы записываются в терминал во время очистки?
Я недавно сделал 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 разделы.