The problem#
Last time, I presented a script read_keypress.sh
which would read any single keypress in a shell script. For printable
characters, it's straightforward what this means, but for keys like left
arrow (🠈), it's not obvious how to deal with them.
The solution#
keytest.sh
demonstrates using read_keypress.sh
to respond to keypresses including 🠈 and
Ctrl+c:
#!/bin/bash
esc=$(printf '\e')
ctrlc=$(printf '\x03')
while true
do
key="$(./read_keypress.sh)"
case $key in
q|"$ctrlc")
echo "Quitting..."
exit
;;
"${esc}[D")
echo "Moved left."
;;
*)
echo "Unexpected key: $key ($(echo -n "$key" | xxd))"
;;
esac
done