Há muitas perguntas no SE que mostram como recuperar do terminal quebrado por cat /dev/urandom
. Para aqueles que não estão familiarizados com este problema - aqui está o que é:
- Você executa
cat /dev/urandom
ou equivalente (por exemplocat binary_file.dat
). - Lixo é impresso.
Tudo bem ... exceto que o seu terminal continua imprimindo lixo mesmo depois que o comando é concluído! Aqui está uma captura de tela de um texto incorreto que, de fato, é uma saída do g ++:
Eu acho que as pessoas estavam certas sobre erros de C ++, às vezes sendo muito enigmáticos!
A solução usual é executar stty sane && reset
, embora seja meio chato executá-lo toda vez que isso acontece.
Por causa disso, o que eu quero focar nesta questão é a razão original pela qual isso acontece e como impedir que o terminal quebre após a emissão desse comando. Não estou procurando soluções como canalizar os comandos ofensivos para tr
ou xxd
, porque isso exige que você saiba que o programa / arquivo gera binário antes de realmente executá-lo / imprimi-lo e precisa ser lembrado toda vez que produzir esses dados .
Percebi o mesmo comportamento no buffer de quadros URxvt, PuTTY e Linux, então não acho que esse seja um problema específico do terminal. Meu principal suspeito é que a saída aleatória contenha algum código de escape ANSI que inverta a codificação de caracteres (de fato, se você executar cat /dev/urandom
novamente, as chances são de que isso desintegrará o terminal, o que parece confirmar essa teoria). Se isso estiver correto, qual é esse código de escape? Existem maneiras padrão de desativá-lo?