2016-01-17 2 views
1

Долгое время я сталкиваюсь с фактом, что bash в linux иногда останавливается, чтобы напечатать символы, которые я вводил. Когда я печатаю текст, он не появляется в окне консоли, но на самом деле он входит. Я могу проверить этот печатать на машинке специальный символ, как Ctrl-C или Enter, и это будет выглядеть так:Bash невидимая типизация

^\Quit (core dumped) 
[[email protected] my]$ [[email protected] my]$ [[email protected] my]$ 

я могу воспроизвести это с огромной вероятностью, когда я отладки мой питон скрипт и манипуляции с обработчиками STDOUT. Во время отладки нажмите Ctrl + | и в 4 из 5 случаев я увижу этот вопрос выше. Почему это происходит и как вернуть мою консоль к нормальной жизни?

+2

Не перезагружается ли работа? – Ctx

+1

Попробуйте это: нажмите Enter, чтобы начать новую команду, затем запустите 'stty sane'. Если это работает, я могу добавить более полный ответ. – Chris

+0

Да, ребята, как «перезагрузка», так и «stty sane» работают! @Крис – academica

ответ

4

Почему это происходит ...

Хороший вопрос.

В принципе, терминалы намного сложнее, чем они появляются.

Определенные значения интерпретируются вашим терминалом как последовательности команд, которые изменяют его поведение. Во время интерактивного использования в качестве конечного пользователя вам обычно не приходится беспокоиться об этом. Но иногда эти команды срабатывают случайно, например. если вы используете cat двоичный файл или когда приложения используют другие режимы ввода и неправильно закрыты.

... и как вернуть свою консоль к нормальной жизни?

Запуск stty sane часто помогает:

Сбросить все режимы в разумных пределах для интерактивного использования терминала.

См. Также https://unix.stackexchange.com/a/79686/12606, который рекомендует следовать этой команде с помощью tput rs1. Я не использовал эту последнюю команду самостоятельно, но попробую ее в следующий раз, когда stty sane сам по себе не исправит.

2

Драйвер терминала обычно повторяет символы при их вводе. Это, однако, было бы нежелательным для приложения терминального терминала ncurses (3), возможно, для выбора опции из экранного меню или в редакторе, таком как vi (1). Эхо-символы будут помешать экрану и запутать типера.

Таким образом, в основном эхо-сигнал является опцией терминального драйвера, терминал можно поместить в необработанный режим, где приложение отвечает за обработку всех входных символов.

Аналогично, если управляющие символы отправляются на терминал, его вполне можно поместить в режим, когда он НЕ отображает символы, как вы ожидаете. Это обычная ошибка, если мусор отправляется на терминалы.

Я должен создать ваш тестовый ввод текста в файл, перенаправить оба файла stdout & stderr в файл и исследовать с помощью od (1), чтобы точно увидеть, какие символы выводятся, чтобы проверить, что происходит на самом деле.

Смежные вопросы