En ksh, vous pouvez essentiellement faire :
stty raw
REPLY=$(dd bs=1 count=1 2> /dev/null)
stty -raw
read -n1
fonctionne pour bash
Le stty raw
le mode empêche ctrl-c de fonctionner et peut vous coincer dans une boucle d'entrée sans issue. Aussi la page de manuel dit stty -raw
n'est pas garanti de remettre votre terminal dans le même état.
Donc, en s'appuyant sur la réponse de dtmilano en utilisant stty -icanon -echo
évite ces problèmes.
#/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"
En bas, read
peut le faire :
read -n1 ans