Veja man tee
:
NAME: tee - read from standard input and write to standard output and files
SYNOPSIS: tee [OPTION]... [FILE]...
Assim:
echo test | tee file1 file2 file3
Como redirecionar a saída padrão para vários arquivos de log? O seguinte não funciona:
some_command 1> output_log_1 output_log_2 2>&1
Veja man tee
:
NAME: tee - read from standard input and write to standard output and files
SYNOPSIS: tee [OPTION]... [FILE]...
Assim:
echo test | tee file1 file2 file3
Digamos que sua saída seja gerada a partir de uma função, cmd()
:
cmd() {
echo hello world!
}
Para redirecionar a saída de cmd
para dois arquivos, mas não para o console, você pode usar:
cmd | tee file1 file2 >/dev/null
Isso funcionará para vários arquivos, considerando qualquer canal de origem de dados para tee:
echo "foobarbaz" | tee file1 file2 file3 file4 > /dev/null
Isso também funcionará:
echo $(cmd) | tee file1 file2 >/dev/null
Sem o redirecionamento /dev/null
, o tee enviará a saída para stdout além dos arquivos especificados.
Por exemplo, se isso for executado no console, você verá a saída lá. Executar a partir de um crontab, a saída aparecerá a mensagem de status que é enviada para você (veja também a resposta de Gilles aqui link ).
Isso funcionou para mim no bash no Ubuntu 12.04, e foi verificado no Ubuntu 14.04 usando o GNU bash 4.3.11 (1), então ele deve funcionar em qualquer versão bash do GNU.
É um post antigo, mas acabei de encontrá-lo agora ...
Em vez de redirecionar a saída para > /dev/null
, você pode redirecioná-la para o último arquivo:
echo "foobarbaz" | tee file1 > file2
Ou para anexar a saída:
echo "foobarbaz" | tee -a file1 >> file2
Como @jofel mencionado em um comentário sob a resposta, isso pode ser feito de forma nativa em zsh
:
echo foobar >file1 >file2 >file3
ou, com a expansão da chave:
echo foobar >file{1..3}
Internamente, isso funciona de maneira muito semelhante às respostas tee
fornecidas acima. O shell conecta o stdout do comando a um processo que canaliza para vários arquivos; portanto, não há nenhuma vantagem técnica convincente em fazer isso dessa maneira (mas faz parecer muito bom). Consulte o manual zsh
para saber mais.
Incapaz de comentar, no entanto, outra maneira de expressar
echo "foobarbaz" | tee file1 file2 file3 file4 file5 file6 file7 file8 > /dev/null
Poderia ser simplificado para isso, ao lidar com muitos arquivos.
echo "foobarbaz" | tee file{1..8} > /dev/null
Tags tee linux io-redirection