Redirecionamento IO
O problema não está no seu script, mas é um recurso do redirecionamento do UNIX IO.
Considere o seguinte comando
find data/ -size +10G | grep -v 'find:'
apenas o fluxo stdout
está sendo enviado para o comando canalizado grep
, as mensagens de erro estão em um fluxo de saída separado, stderr
.
Portanto, mesmo que você esteja vendo as mensagens de erro em sua sessão de terminal, devido ao fato de o terminal estar imprimindo stdout
e stderr
no console, seu comando grep
não é recebendo essas linhas de saída. Isso ocorre devido a como o |
redireciona a saída. O canal |
conecta apenas stdout
aostdin
do próximo comando, então o stderr
não entra no próximo comando.
A maioria dos utilitários *NIX
funciona dessa maneira, enviando erros para o fluxo de saída stderr
para que, em situações como as que você encontra, não haja necessidade de filtrar essas mensagens.
Teste
Para ver qual será o stdout
exato do comando acima quando ele for passado para grep
, faça o seguinte:
find data/ -size +10G > out.txt
Você ainda deve ver os erros no seu console, mas o fluxo de saída stdout
terá ido para um novo arquivo, out.txt
. Olhe lá e você não verá as linhas de mensagens de erro.