1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
#!/bin/bash trap 'stty $ttysave' EXIT INT TERM ttysave=$(stty -g) stty raw -echo while true do read -n1 char echo "$char" done | awk ' /q/ {exit} {printf "[%s]", $0; fflush} ' exit awk 'BEGIN { cmd = "dd bs=1 count=1 2>/dev/null" for (;;) { cmd | getline ch close(cmd) if (ch == "q") exit printf("[%s]", ch) } }'