从bash输出隐藏变量应用程序结果

时间:2010-08-30 17:01:12

标签: bash variables stdout

我正在尝试创建一个脚本,将wget运行到几个站点并检查我们是否从站点收到200 OK。

我的问题是wget应用程序的结果显示在stdout中。有没有办法可以隐瞒这个。

我目前的脚本是:

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

稍后我将使用正则表达式来查找我们从wget产生的errout中收到的200 OK。 当我运行脚本时,它工作正常,但我得到了在我的回声之间添加wget的结果。

有什么方法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用:

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

这也是一招:

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

玩了一下,想出那个:

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

除了“200”之外什么都不输出 - 没有别的。

答案 1 :(得分:0)

杰克的suggestions很好。我稍微修改它们。

如果您只需要检查状态代码,请使用Jack引用的--spider选项。来自文档:

  

使用此选项调用时,Wget将表现为Web蜘蛛,这意味着它不会下载页面,只需检查它们是否在那里。

杰克的第二个建议显示了隐藏输出背后的核心思想:

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

以上将标准输出重定向到/dev/null2>&1然后将标准错误重定向到当前标准输出文件描述符,该描述符已经被重定向到/dev/null,因此它不会给你任何输出。

但是,由于您不想要输出,因此您可以使用--quiet选项。来自文档:

  

关闭Wget的输出。

所以,我可能会使用以下命令

wget --quiet --spider 'http://mysite.com/your/page'
if [[ $? != 0 ]] ; then
    # error retrieving page, do something useful
fi

答案 2 :(得分:0)

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
相关问题