assigning values to variables in the background
Greg Larkin
glarkin at FreeBSD.org
Tue Jan 15 19:30:18 UTC 2013
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 1/15/13 12:42 PM, Nikos Vassiliadis wrote:
> Hi,
>
> A bit of an OT question. I am writing a bourne shell script that
> collects data from a router. Since netstat & vmstat can run for a
> numbers of iterations I thought I would use just that:
>
> stats() ( nstats=`netstat -I ng0 -q 1 60 | tail -1` &
> rawdata=`vmstat -c 2 60 | tail -1` wait ...
>
> The logic was: 1. run the first process in the bg 2. run the second
> process 3. wait to make sure the first process has finished 4.
> continue further
>
> It makes perfect sense why this doesn't work. Both commands run in
> the foreground.
>
> I am going to split the time between netstat and vmstat. So, it
> will be 30 seconds of netstat and 30 seconds of vmstat.
>
> But I am still interested/curious how one should go for this using
> the shell. So, can this be done without files? Any thoughts?
>
> Thanks, Nikos
Hi Nikos,
As far as I can tell, the backticks are what's causing the problem.
Even though you put the first command in the background (maybe with
the & inside the backticks, though), the assignment to the nstats
variables causes the script to block.
If you switch to using temp files, you may have more luck, e.g.:
netstat -w 1 -I ng0 -q 60 | tail -1 > /tmp/netstat.$$ &
npid=`echo $!`
vmstat -w 2 -c 60 | tail -1 > /tmp/vmstat.$$ &
vpid=`echo $!`
wait $npid
nstats=`cat /tmp/netstat.$$`
rm -f /tmp/netstat.$$
wait $vpid
rawdata=`cat /tmp/vmstat.$$`
rm -f /tmp/vmstat.$$`
Hope that helps,
Greg
- --
Greg Larkin
http://www.FreeBSD.org/ - The Power To Serve
http://www.sourcehosting.net/ - Ready. Set. Code.
http://twitter.com/cpucycle/ - Follow you, follow me
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.13 (Darwin)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
iEYEARECAAYFAlD1rkAACgkQ0sRouByUApCQogCgwOWapKTe9Wl+EClhHZ8iHtn+
/hUAniKZZq1Se2DEtTe1+OAsxDw0f++Z
=zCkZ
-----END PGP SIGNATURE-----
More information about the freebsd-questions
mailing list