Терминал Linux: ввод обратной связи пропал, разрывы строк не отображаются
Время от времени мне приходится запускать инструмент командной строки (скрипт Python), вывод которого, похоже, нарушает работу моего терминала. После того, как выполнение завершено, обратная связь при наборе пропала (я не вижу, что я печатаю), а также не отображаются разрывы строк. Это происходит, если терминал запущен удаленно через Putty
а также локально при использовании gnome-terminal
,
Например, после возникновения проблемы, если я наберу ENTER pwd
ENTER, я бы ожидал увидеть:
[userA@host006 ~]$
[userA@host006 ~]$ pwd
/home/userA
[userA@host006 ~]$
Но на самом деле результат:
[userA@host006 ~]$ [userA@host006 ~]$ /home/userA
[userA@host006 ~]$
Единственный способ исправить это - закрыть этот терминал и запустить новый.
Может быть связано: вывод сценария содержит некоторое форматирование на основе терминала (например, инвертирование переднего плана / фона для выделения некоторых сообщений о состоянии). Если я дам этот вывод в файл, я вижу такие вещи, как [07mSome Message Here[0m
,
Любые идеи, что я мог бы сделать, чтобы предотвратить это?
2 ответа
Выполнить команду reset
и ваш терминал должен быть восстановлен ( ссылка).
Эта проблема обычно возникает при выгрузке двоичных данных в терминал. STDOUT
который, когда обработанные коды выхода обрабатываются, может сделать что-либо от изменения цвета текста, отключения эха, даже изменения набора символов.
Самый простой способ избежать этого - убедиться, что вы не сбрасываете неизвестные двоичные данные в терминал, и если вам необходимо преобразовать их в шестнадцатеричные, чтобы убедиться, что они не изменяют настройки терминала.
Разрабатывать ответ Джошуа Брифмена, выполняя reset -c
сбросит только контрольные символы, отвечающие за вашу проблему:
tset
,reset
- инициализация терминала
Usage: tset [options] [terminal]
Options:
-c set control characters
-e ch erase character
-I no initialization strings
-i ch interrupt character
-k ch kill character
-m mapping map identifier to type
-Q do not output control key settings
-r display term on stderr
-s output TERM set command
-V print curses-version
-w set window-size
Также обратите внимание на следующую форму руководства по команде:
Обратите внимание, вам, возможно, придется набрать
<LF>reset<LF>
(символ перевода строки - обычно control-J), чтобы заставить терминал работать, поскольку возврат каретки больше не может работать в ненормальном состоянии. Кроме того, терминал часто не повторяет команду.