我正在尝试创建一个脚本,将wget运行到几个站点并检查我们是否从站点收到200 OK。
我的问题是wget应用程序的结果显示在stdout中。有没有办法可以隐瞒这个。
我目前的脚本是:
RESULT=`wget -O wget.tmp http://mysite.com 2>&1`
稍后我将使用正则表达式来查找我们从wget产生的errout中收到的200 OK。 当我运行脚本时,它工作正常,但我得到了在我的回声之间添加wget的结果。
有什么方法吗?
答案 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/null
。 2>&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