При использовании Perl 5.8.8 в Linux необходимо, чтобы вывод команды perl 'system' был скрыт. Команда в моем коде:
system("wget", "$url", "-Omy_folder/$date-$target.html", "--user-agent=$useragent");
Я пробовал использовать > /dev/null 2>&1
в разных местах системной команды, например:
system("wget", "$url", "-Omy_folder/$date-$target.html", "--user-agent=$useragent","> /dev/null 2>&1");
Может ли кто-нибудь помочь мне с перенаправлением на /dev/null
должно быть?
Когда вы вызываете system () с более чем одним аргументом, вы говорите Perl передать его напрямую одному из вызовов exec * (), поэтому он не будет вызываться оболочкой. Оболочка - это то, что понимает перенаправление файлов. Попробуй это:
system("wget $url -Omy_folder/$date-$target.html --user-agent=$useragent >/dev/null 2>&1");
Обратите внимание, что это технически менее безопасно, чем передача напрямую в exec.
Для цитирования используйте String :: ShellQuote или просто реализуйте логику самостоятельно:
sub sq {
my $str = shift;
if (!$str) {
$str = "''";
} else {
$str =~ s|'|'\\''|g;
$str = "'$str'";
$str =~ s|^''||;
$str =~ s|''$||;
}
return($str);
}
$useragent = sq($useragent);
system("wget $url -Omy_folder/$date-$target.html --user-agent=$useragent >/dev/null 2>&1");
Кроме того, чтобы сделать это немного больше sys-admin-y и немного меньше программиста, рассматривали ли вы возможность использования опции -q для wget вместо того, чтобы прыгать через обручи перенаправления оболочки / файла?