Script behavior I can't grasp

Walt Pawley walt at wump.org
Wed Apr 6 23:08:05 UTC 2011


My IPv6 tunnel has a tendency to vanish from time to time. So I
thought I might write a script to check that and attempt
reconstituting it if needed. After some considerable messing
about, I really thought this ...

#!/bin/sh
if ifconfig en1|grep -q "inet6 2001" ; then exit;
else
        if ps -ax | grep gw6c | grep -qv grep;
        then ps -ax | grep gw6c | grep -v grep | ( read x y; kill "$x" )
        fi
        cd /usr/local/gw6c/bin
        ./gw6c
fi

... should work. But I was wrong, as usual. In the case where
the tunnel has vanished, the gw6c program often does not quit
right away, and it is usually soaking up a lot of processor in
that mode. Thus it was necessary to test for gw6c running and
terminate it if it was. Curiously, even when it was not
running. the test above would fail in the script. On the
command line, it seemed, as near as I could tell, to work just
fine.

Grasping at straws, I decided to try the following:

#!/bin/sh
if ifconfig en1|grep -q "inet6 2001" ; then exit;
else
        if $( ps -ax | grep gw6c | grep -qv grep );
        then ps -ax | grep gw6c | grep -v grep | ( read x y; kill "$x" )
        fi
        cd /usr/local/gw6c/bin
        ./gw6c
fi

It worked just fine. I'd like to know why this disparity. It's
probably something mind bogglingly simple but my researches
have yet to unboogle me. Can you?
-- 

Walter M. Pawley <walt at wump.org>
Wump Research & Company
676 River Bend Road, Roseburg, OR 97471
         541-672-8975


More information about the freebsd-questions mailing list