For the last few months I've been working on pyroscope, I’ve often found myself getting distracted when I run any long tasks in the terminal (tests / docker builds).
This little snippet helps me get back to what I was doing in the terminal by alerting me via a sound message and also a macOS notification.
brew install terminal-notifier# Open ~/.bash_profile and add these functions:
function timer_start {
timer=${timer:-$SECONDS}
}
# this makes bash run timer_start every time you run a command
trap 'timer_start' DEBUG
function notify_when_done {
timer_show=$(($SECONDS - $timer))
unset timer
# 10 is the notification threshold in seconds
if (( ${timer_show} > 10 )); then
# modify this section to fit your needs:
say "Done with task"
terminal-notifier -title "Terminal" -message "Done with task! Exit status: $? Time: ${timer_show}s"
fi
}
# this makes bash run notify_when_done command after every command
if [ "$PROMPT_COMMAND" == "" ]; then
PROMPT_COMMAND="notify_when_done"
else
PROMPT_COMMAND="$PROMPT_COMMAND; notify_when_done"
fi
Update: for information on how to set this up on Linux or with other shells (fish / zsh) see Hacker News comments.

Thanks for the gist. I created (Telert) to easily configure sound alerts, desktop popup, or even Telegram/Slack/Teams/Discord messages when a long-running command finishes. It also works in Python commands.
Setting it up is quick and easy
You can then use it with your long running commands in your script.
Telert will time the command and send a notification to the provider channel when it completes with the execution time and exit code.
https://github.com/navig-me/telert/