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
linux
io-redirection
tee
doubledecker
fonte
fonte
zsh
, você pode usarsome_command >output_log_1 >output_log_2
.Respostas:
Veja
man tee
:Adequadamente:
fonte
cmd 2>&1 | tee log1 log2
tentei executar como acima, mas preciso pressionar ctrl-c para redirecioná-lo para o segundo arquivo de log. também a saída é impressa no console. Desejo que a saída do comando seja redirecionada para os logs, mas não no console. qualquer ajuda é apreciada.tee
comando gravastdin
no (s) arquivo (s) e também nostdout
. Se você não deseja que a saída apareça no terminal, é necessário redirecionar para o/dev/null
que normalmente faria.echo test | tee --append file1 file2
Digamos que sua saída seja gerada a partir de uma função
cmd()
:Para redirecionar a saída de
cmd
para dois arquivos, mas não para o console, você pode usar:Isso funcionará para vários arquivos, considerando qualquer fonte de dados canalizada para tee:
Isso também funcionará:
Sem o
/dev/null
redirecionamento, o tee enviará a saída para o 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á com a mensagem de status que é enviada para você (veja também a resposta de Gilles aqui https://unix.stackexchange.com/a/100833/3998 ).
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); portanto, ele deve funcionar em qualquer versão recente do GNU bash.
fonte
version 4.3.11(1)-release (i686-pc-linux-gnu)
) no Ubuntu 14.04.É um post antigo, mas eu o encontrei agora ...
Em vez de redirecionar a saída para
> /dev/null
você, você pode redirecioná-la para o último arquivo:Ou para anexar a saída:
fonte
-a
no T)Como o @jofel mencionado em um comentário na resposta, isso pode ser feito nativamente em
zsh
:ou, com expansão de braçadeira:
Internamente, isso funciona de maneira muito semelhante às
tee
respostas fornecidas acima. O shell conecta o stdout do comando a um processo que canaliza para vários arquivos; portanto, não há qualquer vantagem técnica convincente para fazê-lo desta maneira (mas não uma boa aparência real). Veja ozsh
manual para mais informações.fonte
Não é possível comentar, no entanto, outra maneira de expressar
Pode ser simplificado para isso, ao lidar com muitos arquivos.
fonte
file1
através defile8
como seus nomes e esses são provavelmente apenas a exemplo espaços reservados para os nomes dos arquivosEu precisava de um arquivo de log de sessão e outro arquivo para todas as sessões que fiz:
echo blabla |tee thisession >>allsessions
fonte
tee
comando já foi mencionado.