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 0You 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