Redirecionamento da saída para um arquivo


O redirecionamento E/S muda como o processo obtém sua entrada ou saída. Em vez de obter entrada do teclado ou enviar saída e erros para o terminal, o processo pode ler ou gravar em arquivos.

Com o redirecionamento, você pode salvar as mensagens em um arquivo em vez de exibir a saída no terminal. Como alternativa, você pode usar o redirecionamento para descartar a saída ou os erros, para que eles não sejam exibidos no terminal nem salvos.

Você pode redirecionar um processo stdout para impedir que a saída do processo apareça no terminal. Se você redirecionar stdout para um arquivo e o arquivo não existir, o arquivo será criado. Se o arquivo existir e o redirecionamento não for o anexado ao arquivo, o redirecionamento substituirá o conteúdo do arquivo. Para descartar a saída de um processo, você pode redirecionar para o arquivo especial vazio /dev/null que, silenciosamente, descarta a saída do canal que é redirecionada para ele.

Conforme exibido na tabela a seguir, apenas stdout redirecionar não impede a exibição de mensagens de erro stderr no terminal.

A ordem das operações de redirecionamento é importante. A sequência a seguir redireciona a saída padrão para o arquivo output.log e, depois, redirecionamos as mensagens de erro padrão para o mesmo local da saída padrão (output.log).

&> output.log 2>&1

A sequência seguinte faz o redirecionamento na ordem oposta. Essa sequência redireciona as mensagens de erro padrão ao local padrão da saída padrão (a janela de terminal, portanto não há mudanças) e depois apenas redireciona a saída padrão para output.log.

2>&1 > output.log

Devido a isso, alguns preferem usar os operadores de fusão de redirecionamento:

  • &> output.log em vez de > output.log 2>&1

  • &>> output.log em vez >> output.log 2>&1 (no Bash 4/RHEL 6 e posterior)

No entanto, administradores de sistema e programadores que também usam outros shells relacionados ao bash (conhecidos como shells compatíveis com Bourne) para comandos de script preferem evitar os operadores de fusão de redirecionamento mais recentes, pois não são padronizados nem implementados em todos os shells e têm outras limitações.

Referências