Perl: oculta a saída do sistema

2

Usando o Perl 5.8.8 no Linux, precisamos que a saída de um comando perl 'system' seja oculta. O comando no meu código é:

system("wget", "$url", "-Omy_folder/$date-$target.html", "--user-agent=$useragent");

Eu tentei usar > /dev/null 2>&1 em lugares diferentes no comando do sistema, assim:

system("wget", "$url", "-Omy_folder/$date-$target.html", "--user-agent=$useragent","> /dev/null 2>&1");

Alguém pode me ajudar com o redirecionamento para /dev/null ?

    
por splattne 01.04.2010 / 21:19

1 resposta

3

Quando você chama system () com mais de um arg, você está dizendo ao perl para passá-lo diretamente para uma das chamadas exec * (), então ele não será chamado com um shell. O shell é o que entende o redirecionamento de arquivos. Tente isto:

system("wget $url -Omy_folder/$date-$target.html --user-agent=$useragent >/dev/null 2>&1");

Observe que isso é tecnicamente menos seguro do que transmiti-lo diretamente para exec.

Para citações, use String :: ShellQuote ou apenas implemente a lógica:

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");

Além disso, para tornar isso um pouco mais sys-admin-y e um pouco menos programador-y, você considerou usar a opção -q para wget ao invés de saltar através dos aros de redirecionamento de shell / arquivo?

    
por 01.04.2010 / 21:59

Tags