Com base no que você está descrevendo, aqui está algo simples (graças aos comentários de Dennis):
while true; do
# 300 is the time interval in seconds
if read -n 1 -t 300; then
case $REPLY in
a)
# command(s) to be run if the 'a' key is pressed
echo a;;
b)
# command(s) to be run if the 'b' key is pressed
echo b;;
esac
else
# command(s) to be run if nothing is pressed after a certain time interval
echo
fi
done
Aqui está a alternativa que eu tinha antes, embora eu não consiga lembrar por que eu decidi contra case
em primeiro lugar:
# define functions here
a_pressed() {
# command(s) to be run if the 'a' key is pressed
}
b_pressed() {
# commands for if 'b' is pressed
}
# etc.
nothing_pressed() {
# command(s) to be run if nothing is pressed after a certain time interval
}
while true; do
# 300 is the time interval in seconds
if read -n 1 -t 300; then
fn_name="${REPLY}_pressed"
declare -pF | grep -q "$fn_name" && ${fn_name}
else
nothing_pressed
fi
done
De qualquer forma, isso manipulará pressionamentos de tecla e invocará automaticamente uma ação sempre que nada for feito por 5 minutos.