Supondo que o bash, a read
option -N
pode ser útil:
-N nchars return only after reading exactly NCHARS characters, unless
EOF is encountered or read times out, ignoring any delimiter
Se você usar read -N 1 x
, ele retornará assim que um caractere for
entrou, sem esperar por uma nova linha.
Com relação à segunda parte da sua pergunta, clique em Ctrl - C envia o sinal INT para o seu script; interceptando isso é uma simples questão de pegar esse sinal.
Um exemplo colocando tudo junto:
trap 'echo special command' INT
while read -N 1 foo; do
echo normal command
done
E uma amostra de interação (eu bati x duas vezes, e depois Ctrl - C uma vez):
xnormal command
xnormal command
^Cspecial command
(Note que este script será chato para sair; uma maneira seria
pare com