stty raw

1. stty raw

QuanticoDW
QuanticoDW

(usa Ubuntu)

Enviado em 15/05/2025 - 12:04h

Tem alguma forma de receber a tecla quando o stty raw esta ativado, sendo que não apareça as ^X, ^[[A, e entre outras iguais. Mas eu quero apenas receber as letras normais tipo "q", "p"... e número.



  


2. Re: stty raw

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 15/05/2025 - 12:04h

Claro! Quando você ativa o modo "raw" com o comando `stty raw`, o terminal não processa as entradas como normalmente faz. Isso significa que caracteres de controle, como os que você mencionou (^X, ^[[A, etc.), são passados diretamente.

Se você deseja receber apenas letras e números sem os caracteres de controle, pode criar um loop que lê a entrada e filtra os caracteres desejados. Veja um exemplo simples em um script de shell:

```bash
#!/bin/bash

stty raw

while true; do
read -n 1 char # Lê um único caractere

# Verifica se é uma letra ou número
if [[ $char =~ [a-zA-Z0-9] ]]; then
echo "Você pressionou: $char"
fi

# Para sair do loop, você pode usar uma condição, como pressionar 'q'
if [[ $char == 'q' ]]; then
break
fi
done

stty sane # Restaura o modo normal do terminal
```

Neste script:

- Ativamos o `stty raw` para receber entrada direta.
- Usamos `read -n 1 char` para ler um único caractere por vez.
- Filtramos a entrada para aceitar apenas letras e números.
- O loop continua até você pressionar 'q', quando ele encerra.

Para executar, dê permissão e rode


3. Re: stty raw

Paulo
paulo1205

(usa Ubuntu)

Enviado em 21/05/2025 - 03:55h

Teoricamente, o código abaixo deveria funcionar.
#!/bin/bash

stty raw -echo -echoctl min 0 time 1

while read -u 0 -n 1 a; do
# Pega somente os caracteres alfanuméricos (i.e. ignora os demais).
if [[ "$a" ~= ^[0-9A-Za-z]$ ]]; then
echo '"$a"'
[[ "$a" = "x" ]] && break # Sai se se tiver apertado ‘x’.
fi
done

stty sane


Entretanto, o comando read do Bash mexe no terminal, então o efeito dos argumentos min 0 time 1 acaba sendo desfeito.

Se quiser usar o terminal em mais baixo nível, melhor usar outra linguagem, em vez de shell.


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts