read
tem um parâmetro para o tempo limite, você pode usar:
read -t 3 answer
Se você quiser que read
espere por um único caractere (linha inteira + Enter é o padrão), você pode limitar a entrada para 1 caractere:
read -t 3 -n 1 answer
Após a entrada correta, o valor de retorno será 0, então você pode verificar isso da seguinte forma:
if [ $? == 0 ]; then
echo "Your answer is: $answer"
else
echo "Can't wait anymore!"
fi
Eu acho que não há necessidade de implementar trabalhos em segundo plano na sua situação, mas se você quiser, aqui está um exemplo:
#!/bin/bash
function ProcessA() {
sleep 1 # do some thing
echo 'A is done'
}
function ProcessB() {
sleep 2 # do some other thing
echo 'B is done'
}
echo "Starting background jobs..."
ProcessA & # spawn process "A"
pid_a=$! # get its PID
ProcessB & # spawn process "B"
pid_b=$! # get its PID too
echo "Waiting... ($pid_a, $pid_b)"
wait # wait for all children to finish
echo 'All done.'