OK. Se eu quisesse redirecionar a saída de um programa para um arquivo, faria algo assim
prog > file
Se eu quisesse redirecionar stdout e stderr para esse arquivo, então eu faria
prog > file 2>&1
Tudo está bem se você quiser que a saída vá para o arquivo. Mas e se você quiser que a saída vá para o arquivo e ainda assim vá para stdout / stderr? Portanto, a saída é salva no arquivo, mas você ainda pode vê-la no console enquanto o programa está sendo executado. Existe uma maneira de fazer isso? E se sim, como?
shell
io-redirection
Jonathan M Davis
fonte
fonte
stdout
é o descritor de arquivo 1 efoo > some_file
significa que um descritor de arquivo somente gravação abertosome_file
é o stdout do foo. stdout sempre vai para stdout.Respostas:
tee
existe para esse fim; pega um argumento de nome de arquivo e grava os dados que lê de stdin no stdout e no arquivo:fonte
prog |& tee file
.prog |& tee /dev/tty > file
, o que pode ser útil no meio de um pipeline, por exemplo,foo |& tee /dev/tty | sed 's/.*\r//' > foo.log
para ver atualizações de progresso da linha de status em seu terminal, mas filtrá-las em um arquivo de log. Ou use-o para depurar um pipeline que você está invadindo em conjunto, permitindo ver os dados naquele momento.