Skip to content

Instantly share code, notes, and snippets.

@tir38
Last active October 20, 2024 04:43
Show Gist options
  • Save tir38/5855000 to your computer and use it in GitHub Desktop.
Save tir38/5855000 to your computer and use it in GitHub Desktop.
in-terminal timer shell script
# script to create timer in terminal
# Jason Atwood
# 2013/6/22
#!/bin/sh
# start up
echo "starting timer script ..."
sleep 1 # seconds
# get input from user
read -p "Timer for how many minutes?" -e DURATION
DURATION=$(( $DURATION*60 )) # convert minutes to seconds
# get start time
START=$(date +%s)
# infinite loop
while [ -1 ]; do
clear # clear window
# do math
NOW=$(date +%s) # get time now in seconds
DIF=$(( $NOW-$START )) # compute diff in seconds
ELAPSE=$(( $DURATION-$DIF )) # compute elapsed time in seconds
MINS=$(( $ELAPSE/60 )) # convert to minutes... (dumps remainder from division)
SECS=$(( $ELAPSE - ($MINS*60) )) # ... and seconds
# conditional
if [ $MINS == 0 ] && [ $SECS == 0 ] # if mins = 0 and secs = 0 (i.e. if time expired)
then # blink screen
for i in `seq 1 180`; # for i = 1:180 (i.e. 180 seconds)
do
clear # flash on
setterm -term linux -back red -fore white # use setterm to change background color
echo "00:00 " # extra tabs for visibiltiy
sleep 0.5
clear # flash off
setterm -term linux -default # clear setterm changes from above
echo "00:00" # (i.e. go back to white text on black background)
sleep 0.5
done # end for loop
break # end script
else # else, time is not expired
echo "$MINS:$SECS" # display time
sleep 1 # sleep 1 second
fi # end if
done # end while loop
@tir38
Copy link
Author

tir38 commented Jun 25, 2013

Works great in Gnome shell. Tested in tmux too. Works but doesn't flash entire pane.
Use "setterm -default" to reset colors if terminating program during flashing.

@quantumpotato
Copy link

Worked immediately on OSX in iTerm. Thank you!

@bemonolit
Copy link

Can you add options to the end time to play music? PLEASE.

@horvay
Copy link

horvay commented Oct 20, 2024

You can make your own beep in linux with

( speaker-test -t sine -f 400 -l 1 >/dev/null & sleep .3 && kill -9 $! );( speaker-test -t sine -f 500 -l 1 >/dev/null & sleep .3 && kill -9 $! );( speaker-test -t sine -f 300 -l 1 >/dev/null & sleep .3 && kill -9 $! )

This does a Do DOO doo sound.

Replace lines 31 to 43 with it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment