Wget可以返回true或false(0或1)

时间:2014-02-12 05:18:25

标签: linux perl unix wget

大家好我很想知道wget只有在处理了某个url之后才能返回true或false(0或1)。我的想法是创建一个小的PERL脚本来监视我的几个网页并发送电子邮件或某种警报(我仍处于开发过程中)。 以下是我到目前为止的情况:

#!usr/bin/perl
use strict;
use warnings;
#use LWP::Simple;

my $url='google.com';

system('wget --delete -q $url');
print "$?";
if($? != 0 )
{
        print "false\n";
}

else
{
        print "OK\n";
}

这只是一个开始,但我试图让它尽可能保持沉默,输出越少越好。 这是我的输出:   尝试`wget --help'获取更多选项。   256   假 任何帮助将不胜感激。此外,它不一定是wget,但这是我目前所知道的。

1 个答案:

答案 0 :(得分:2)

$url未插入单引号字符串文字中,因此您运行了shell命令

wget --delete -q $url

除非存在环境变量url,否则执行带有wget--delete两个参数的命令-q。 Wget抱怨“遗失的URL”(您省略了一些错误行)并返回状态代码1.

变量$?包含命令的状态代码,乘以256.更准确地说,它是wait system call返回的值。如果$?等于零表示成功,那么你就是正确的。失败可以是1以外的代码:任何非零值都表示失败。

如果您希望看到绝对没有输出,请将输出和错误重定向到/dev/null

system("wget --delete -q $url >/dev/null 2>/dev/null");

但隐藏错误是一个坏主意:如果你这样做,你就无法诊断它们。您可以通过仅重定向stdout来隐藏正常输出而不会隐藏错误。但是wget的-q选项已经这样做了。

system("wget --delete -q $url");
if ($?) {
    print "false\n";
} else {
    print "OK\n";
}

此代码假定$url不包含shell特殊字符。如果你不能保证,保护所有shell特殊字符:

system('wget --delete -q ' . quotemeta($url) . ' >/dev/null 2>/dev/null');

或者,如果您没有忽略错误消息,请使用system的多参数形式完全跳过shell:

system('wget', '--delete', '-q ', $url);