![Perl:隐藏系统输出](https://linux22.com/image/510018/Perl%EF%BC%9A%E9%9A%90%E8%97%8F%E7%B3%BB%E7%BB%9F%E8%BE%93%E5%87%BA.png)
在 Linux 上使用 Perl 5.8.8,需要隐藏 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
吗?
答案1
当您使用多个参数调用 system() 时,您是在告诉 perl 将其直接传递给 exec*() 调用之一,因此不会使用 shell 调用它。shell 是理解文件重定向的东西。试试这个:
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");
此外,为了使它更像系统管理员而不是程序员,您是否考虑过使用 wget 的 -q 选项,而不是跳过 shell/文件重定向环节?