Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

When I have wait for slow commands (operations on large databases for example), I start doing something else and often don't notice for a long time that it has finished, wasting valuable time. I am looking for a way for the shell to alert me (by which I mean, run some custom command which I can determine) when a command which has been running for more than X seconds has finished and I got back the prompt.

I am using Bash, but solutions for other shells would be interesting as well.

share|improve this question

3 Answers 3

up vote 5 down vote accepted

This script, if put in your .bashrc, will execute any command you like whenever the prompt returns after a long time executing a command - customize the "long time" (after the -gt) in seconds, and within the curly braces on the same line you can execute whichever commands you like. You could even send yourself an email with the Host on which this occured and the last executed command and its status code.

beep_if_long_time_past() {
    LAST_COMMAND_DURATION=$(($(date +%s) - ${LAST_COMMAND_TIME}))
    [[ ${LAST_COMMAND_DURATION} -gt 60 ]] && { echo "Took long, didn't it?" ; notify-send "I'm done after ${LAST_COMMAND_DURATION} seconds!"; }
    export LAST_COMMAND_TIME=
}

export PROMPT_COMMAND=beep_if_long_time_past
trap '[ -z ${LAST_COMMAND_TIME} ] && export LAST_COMMAND_TIME=$(date +%s)' DEBUG
share|improve this answer
    
This works great, thanks. I stuck with echo -e "\a" which works well with PuTTY (you can configure it to start blinking the taskbar icon instead of giving a sound). –  Tgr Sep 17 '12 at 8:01
    
Unfortunately, this breaks in MC subshells (MC bug #2027). –  Tgr Sep 18 '12 at 8:38
slowcommand; echo -e "\a"

Works, but it is ugly and inconvenient to append the notification command by hand every time; also easy to forget. (A notification can be appended to an already running process with wait as this answer explains, but that is even uglier.)

share|improve this answer

I usually use a pop-up notification, xmessage tends to be available:

slowcommand; xmessage -center 'Job done!'

Or add a reminder (depends on the atd daemon):

echo 'xmessage -display :0 -center "Check on job"' | at 'now + 10 minutes'
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.