Perhaps STDERR and STDOUT are not being correctly redirected to /dev/null?
Correto. O que 2>&1>/dev/null
faz é redirecionar 2 para no mesmo local que 1 , que é o terminal controlador (pseudo), e redireciona 1 para /dev/null
:
» perl -e 'print "Testing stdout\n"; print STDERR "Testing stderr\n"'
Testing stdout
Testing stderr
» perl -e 'print "Testing stdout\n"; print STDERR "Testing stderr\n"' 1> /dev/null
Testing stderr
» perl -e 'print "Testing stdout\n"; print STDERR "Testing stderr\n"' 2> /dev/null
Testing stdout
» perl -e 'print "Testing stdout\n"; print STDERR "Testing stderr\n"' 2>&1 > /dev/null
Testing stderr
A maneira simples de fazer isso é usar apenas &>
:
» perl -e 'print "Testing stdout\n"; print STDERR "Testing stderr\n"' &> /dev/null
[no output]
Veja o exemplo 3.6 aqui . Note que apesar de dizer que isso redireciona "cada saída", isso se refere ao shell de execução, portanto se o processo executado usar outros descritores de arquivo para log ou redirecionar seu próprio stdout / stderr para nunca atingir o shell, eles não serão afetados.