V ksh můžete v podstatě udělat:
stty raw
REPLY=$(dd bs=1 count=1 2> /dev/null)
stty -raw
read -n1
funguje pro bash
stty raw
režim zabraňuje ctrl-c v práci a může vás uvíznout ve vstupní smyčce bez cesty ven. Také manuálová stránka říká stty -raw
není zaručeno, že vrátí váš terminál do stejného stavu.
Takže stavíme na dtmilanově odpovědi pomocí stty -icanon -echo
se těmto problémům vyhýbá.
#/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"
V bash read
umí to:
read -n1 ans