bash scripting: eval and waiting for processes in background

Amedee Van Gasse (ub) amedee-ubuntu at amedee.be
Thu Feb 25 15:18:14 UTC 2010


Hi,

I have a directory with some scripts with similar names, that I would like
to run. I would like to run them all from another script, without having
to specify their individual names. Because in the future I may add other
scripts, and then I don't have to change the master script.
I tried this:

SCRIPTS=`ls /root/bin/hotcopy-*.sh`
eval "$SCRIPTS" &
wait
echo "Continue master script."

Works great, except for one little detail.
I added echo lines at the start and end of each script for debugging
purpose. Because the & moves the process to the background, I expected to
see the following output:

Script 1 starting...
Script 2 starting...
Script 3 starting...
Script 4 starting...
Script 1 done.
Script 4 done.
Script 3 done.
Script 2 done.
Continue master script.

The real output is:

Script 1 starting...
Script 1 done.
Script 2 starting...
Script 2 done.
Script 3 starting...
Script 3 done.
Script 4 starting...
Script 4 done.
Continue master script.

So this means that the scripts aren't running simultaneous. It's not a big
issue, but they are all independent. Each script stops a service, runs
some maintenance (seconds to several minutes) and restarts the service, so
I'd like to keep the total service downtime as short as possible.

I suspect that the problem is with the eval command parsing multiple
scripts at once. I tried moving the & inside the quotes, but that doesn't
make a difference.

Any advice?

-- 
Amedee





More information about the ubuntu-users mailing list