Um comando tar normal
tar cvf foo.tar ./foo >foo.out 2>foo.err
possui três fluxos de E / S de saída
- arquivar dados no foo.tar
- lista de nomes de arquivos para STDOUT (redirecionada para foo.out)
- mensagens de erro para STDERR (redirecionadas para foo.err)
Posso inspecionar o foo.err em busca de mensagens de erro sem precisar ler a lista de nomes de arquivos.
se eu quiser fazer alguma coisa com os dados do arquivo (canalizá-lo através do netcat ou de um programa de compactação especial), posso usar a -f -
opção tar
tar cvf - ./foo 2>foo.err | squish > foo.tar.S
Mas agora minha lista de nomes de arquivos está misturada às minhas mensagens de erro, porque a -v
saída do tar obviamente não pode ir para STDOUT (é para onde os dados do arquivo fluem), então o tar habilmente escreve isso no STDERR.
Usando o shell Korn, existe uma maneira de construir um comando que canaliza o fluxo de archive para outro comando, mas ainda captura a -v
saída separadamente de qualquer mensagem de erro.
tee
? Parece um caso de uso bastante válido para isso.