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

发布于 2024-09-16 17:36:35 字数 318 浏览 4 评论 0原文

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

我的问题是 wget 应用程序的结果显示在标准输出中。有什么办法可以隐藏这个吗?

我当前的脚本是:

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

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

有什么办法解决这个问题吗?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

三寸金莲 2024-09-23 17:36:36

杰克的建议很好。我会稍微修改它们。

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

当使用此选项调用时,Wget 将充当网络蜘蛛,这意味着它不会下载页面,而只是检查它们是否存在。

Jack 的第二个建议展示了隐藏输出背后的核心思想:

... >/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

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
谎言月老 2024-09-23 17:36:36
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
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
装纯掩盖桑 2024-09-23 17:36:35

您可以使用:

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”之外什么也不输出 - 没有别的。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文