Run When Done |
May 20th, 2014 |
| tech |
$ long_running_process.sh && echo "runs on success"
$ long_running_process.sh || echo "runs on failure"
$ long_running_process.sh ; echo "runs either way"
One common thing to do this with is email, so you get a notification:
$ long_running_process.sh ; echo done | mail -s done jeff@jefftk.com
(This does require your server to be set up for sending mail in a way
that won't get rejected, which is actually kind of tricky.)
For years, though, I've gotten annoyed at myself when after a process
has been running for a while I wish I had set something else to run
after it. Should I kill the process and start it over with &&
something_else.sh, or should I let it finish and then run
something_else.sh on my own?
It turns out you don't have to choose! Shell job control can do this for you. Just background the first command, and then when you foreground it add the next command:
$ sleep 10
^Z
[1]+ Stopped sleep 10
$ fg ; echo "finished, exit status is $?"
sleep 10
(a few seconds of waiting)
finished, exit status is 0
You can see fg substitutes for the original command, running
as long as it would, and passing along the exit status so &&
and || still work.
Comment via: google plus, facebook, substack