views:

29

answers:

3

Hi Guys.

I am trying to create a script that will run wget to a few sites and check if we receive a 200 OK from the site.

My problem is that the result of wget application is shown in the stdout. Is there a way I can hide this.

My current script is:

RESULT=`wget -O wget.tmp http://mysite.com 2>&1`

Later I will use regex to look for the 200 OK we receive from the errout that wget produces. When I run the script, it works fine, but I get the result of the wget added between my echos.

Any way around this?

A: 

You can use:

RESULT=`wget --spider http://mysite.com 2>&1`

And this does the trick too:

RESULT=`wget -O wget.tmp http://mysite.com >/dev/null 2>&1`

Played around a little and came up with that one:

RESULT=`curl -fSw "%{http_code}" http://example.com/ -o a.tmp 2>/dev/null`

This outputs nothing but "200" - Nothing else.

JackFuchs
Jack, I'm not seeing backticks or `$( ... )`?
Kaleb Pederson
I just tried both, but I still get the stderr to output to my screen as. I am starting to think that this might be wget as it looks like it is only showing you the stderr when you run it by itself...
Gerald
Just updated the post.
JackFuchs
Thanx Jack! That works perfectly!:)
Gerald
A: 

Jack's suggestions are good. I'd modify them just slightly.

If you only need to check the status code, use the --spider option that Jack referenced. From the docs:

When invoked with this option, Wget will behave as a Web spider, which means that it will not download the pages, just check that they are there.

And Jack's second suggestion shows the core ideas behind hiding output:

... >/dev/null 2>&1

The above redirects standard output to /dev/null. The 2>&1 then redirects standard error to the current standard output file descriptor, which has already been redirected to /dev/null, so it won't give you any output.

But, since you don't want output, you might be able to use the --quiet option. From the docs:

Turn off Wget's output.

So, I'd probably use the following command

wget --quiet --spider 'http://mysite.com/your/page'
if [[ $? != 0 ]] ; then
    # error retrieving page, do something useful
fi
Kaleb Pederson
A: 
TCP_HOST="mydomain.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "HEAD / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
    case "$line" in
        *200*OK* )
            echo "site OK:$TCP_HOST"
            exec >&5-
            exit
           ;;
        *) echo "site:$TCP_HOST not ok"
           ;;
    esac
done <&5
ghostdog74