It's also a good thing to put a timeout into the loop, so that you don't block permanently.
I have a script snippet that does something similar. It checks to see if pump has assigned an IP address in the wanted subnet, and then uses that address if it is assigned (or times out after 8 attempts).
In this case, you can use the value of $emsg to decide what to do after this loop (I just print it). The question for success here is whether the read gets enough words to fill 'num' with the
last octet of the IP address from 'ifconfig -a' -- # the network address: NETIP=192.168.211 dmsg="waiting for dhcp" emsg="-n ''" for i in 1 2 3 4 5 6 7 8 splat ; do read a b c d num remaining <<-EOF ` ifconfig -a | grep inet | grep -F $NETIP | tr . ' ' ` EOF if [ -n "$num" ] ; then [[ -z "$emsg" ]] && emsg="-n" || emsg=" done! " netpart=$b.$c.$d subnet=$d break else echo -n "$dmsg " dmsg=" ... " emsg=" timeout!" [ "splat" = "$i" ] || sleep 5 fi done echo $emsg "<$num>" exit ======================== LEE, Yui-wah (Clement) wrote:
Hi, What is a clean way to introduce a delay between the scripts in /etc/init.d ? I saw a problem that /etc/rc2.d/S27bind9 started before /etc/rc2.d/S25ifplugd actually completed all the tasks ... Specifically, ifplugd, with the help of resolvconf, would generate the file /var/run/bind/named.options, which would be used by bind9. Unfortunately by the time bind9 ran, the file was not yet generated. I could force a delay between the two scripts by introducing another script (run at S26) that does nothing but sleep for a fixed time (30 seconds). That seemed to work around the problem. But I wonder if there is a cleaner solution. Ideally, the delay should not be fixed but dynamic. That is, a later script can have some means to know for sure that an earlier script has completed all the tasks already.
-- Stephen Samuel +1(778)861-7641 samnospam@bcgreen.com http://www.bcgreen.com/ Powerful committed communication. Transformation touching the jewel within each person and bringing it to light.