2012-01-04 17 views

risposta

5

In ksh si può sostanzialmente fare:

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

In bash, read può farlo:

read -n1 ans 
+0

restituisce '0403-010 Un flag specificato non è valido per questo comando. Errore. – footy

+0

@footy, il comando di lettura incorporato di bash ha l'opzione -n. Che shell stai usando? –

+0

@glennjackman ksh shell sto usando – footy

7

read -n1 lavori per bash

La modalità stty raw impedisce ctrl-c da lavorare e puoi farti rimanere bloccato in un loop di input senza via d'uscita. Anche la pagina man dice che stty -raw non è garantito per riportare il terminale allo stesso stato.

Quindi, la creazione di dtmilano's answer utilizzando stty -icanon -echo evita tali problemi.

#/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" 
Problemi correlati