Параметр в echo
настройках драйвера терминала указывает, должен ли драйвер терминала отображать введенные вами символы. Такие приложения, как vi
или современные оболочки, по их запросу не используют этого, и при этом они не используют терминальный канонический режим, они обрабатывают каждое нажатие клавиши и отражают то, что вы печатаете сами, записывая в терминальное устройство.
Тем не менее, readline и любое приложение, использующее его, например, bash
или gdb
отключают их эхо, когда они обнаруживают, что терминал echo
был отключен, другие оболочки любят zsh
или tcsh
нет.
Обратите внимание, что echo
всегда отключается в bash
приглашении оболочки (или любой современной оболочки с собственным редактором строк), так как readline выполняет свое собственное отображение. bash
/ readline
сохраняет настройки терминала перед каждым приглашением и устанавливает его на тот, который ему необходим для реализации своего редактора строк (который включает в себя отключение echo
), и сбрасывает его до сохраненного значения перед выполнением команды.
Таким образом, вывод stty -a
этой сохраненной конфигурации. И bash
/ readline (но не другие оболочки) отключает собственное отображение, когда echo
отключено в этой сохраненной конфигурации .
Вы можете получить то же поведение, которое вы видите, выполнив:
stty -echo
Приложения обычно отключают эхо-сигнал терминала, когда они выдают запрос на ввод пароля, или, как в случае vi
или bash
выше, для реализации своего собственного редактирования текста (а затем они не используют канонический режим терминала), и они восстанавливают настройки при выходе.
Еще одно отличие в вашем случае - это то, что icanon
оно было отключено, что говорит о том, что мы более вероятны во втором случае.
Ваш скрипт ruby, вероятно, запускает визуальное приложение, которое не может правильно сбросить настройки терминала. Это может произойти, если это приложение будет убито сигналом без перехвата, таким как SIGKILL, или если оно все еще работает или приостановлено.
Чтобы восстановить настройки терминала, вы можете сделать stty sane
или reset
. Возможно, вы захотите проверить, не запущен ли еще какой-либо процесс и какое приложение запускает этот сценарий и почему он работает неправильно.