Talvez isso ajude você. Eu integrei os dois, com pequenas modificações embora. Aqui está o resultado.
BEGIN=$(date +%s)
echo Starting Stopwatch...
echo Press Q to exit.
while true; do
NOW=$(date +%s)
let DIFF=$(($NOW - $BEGIN))
let MINS=$(($DIFF / 60))
let SECS=$(($DIFF % 60))
let HOURS=$(($DIFF / 3600))
let DAYS=$(($DIFF / 86400))
# \r is a "carriage return" - returns cursor to start of line
printf "\r%3d Days, %02d:%02d:%02d" $DAYS $HOURS $MINS $SECS
# In the following line -t for timeout, -N for just 1 character
read -t 0.25 -N 1 input
if [[ $input = "q" ]] || [[ $input = "Q" ]]; then
# The following line is for the prompt to appear on a new line.
echo
break
fi
done
Como você pode ver, eu coloquei o segundo script no lugar do comando sleep
no primeiro primeiro. O tempo limite em read
agora tem a função de lapso de tempo. Observe que a opção -N
é necessária para que read
não espere Enter e reaja assim que a primeira tecla for pressionada.