2012-01-04 24 views

Respuesta

5

En ksh básicamente se puede hacer:

stty raw 
REPLY=$(dd bs=1 count=1 2> /dev/null) 
stty -raw 
12

En bash, read puede hacerlo:

read -n1 ans 
+0

da '0403-010 Un indicador especificado no es válido para este comando. Error. – footy

+0

@footy, el comando de lectura incorporado de bash tiene la opción -n. ¿Qué shell estás usando? –

+0

@glennjackman ksh shell Estoy usando – footy

7

read -n1 obras para fiesta

El modo stty raw impide ctrl-c de trabajar y puede atraparte en un bucle de entrada sin salida. Además, la página del manual dice stty -raw no garantiza que regrese su terminal al mismo estado.

Por lo tanto, construir en dtmilano's answer usando stty -icanon -echo evita esos problemas.

#/bin/ksh 
## /bin/{ksh,sh,zsh,...} 

# read_char var 
read_char() { 
    stty -icanon -echo 
    eval "$1=\$(dd bs=1 count=1 2>/dev/null)" 
    stty icanon echo 
} 

read_char char 
echo "got $char" 
Cuestiones relacionadas