A configuração echo
nas configurações do driver do terminal especifica se o driver do terminal deve repetir os caracteres digitados. Aplicativos como vi
ou shells modernos em seu prompt não usam isso, nem usam o terminal canonical mode , eles lidam com todas as teclas pressionadas e echo o que você digita sozinho gravando no terminal.
No entanto, readline e qualquer aplicativo que o use, como bash
ou gdb
, também desativam o seu echoing quando detectam que o terminal echo
foi desativado , outros shells como zsh
ou tcsh
não.
Observe que echo
está sempre desativado no prompt de shell bash
(ou qualquer shell moderno com seu próprio editor de linhas), pois readline faz seu próprio eco. bash
/ readline
salva as configurações do terminal antes de cada prompt e o configura para o que precisa para implementar seu editor de linhas (que inclui a desativação de echo
) e redefine para o valor salvo antes de executar um comando.
Portanto, a saída de stty -a
é essa configuração salva. E bash
/ readline (mas não outras shells) desabilita seu próprio eco quando echo
está desabilitado nessa configuração salva .
Você pode obter o mesmo comportamento que está visualizando:
stty -echo
Normalmente, os aplicativos desabilitam o eco do terminal quando emitem uma solicitação de senha ou, como no caso de vi
ou bash
acima, para implementar sua própria edição de texto (e não usam o modo canônico terminal) e eles restauram as configurações ao sair.
Outra diferença no seu caso é que icanon
foi desativado, o que sugere que estamos mais propensos no segundo caso.
Seu script ruby provavelmente inicia um aplicativo visual que falha ao redefinir as configurações do terminal corretamente. Isso pode acontecer se o aplicativo for eliminado com um sinal não passível de interceptação, como o SIGKILL ou se ainda estiver em execução ou suspenso.
Para restaurar as configurações do terminal, você pode fazer um stty sane
ou reset
. Você pode querer verificar se nenhum processo ainda está em execução e qual aplicativo esse script executa e por que está se comportando mal.