Do manual tee
no meu sistema:
The tee utility copies standard input to standard output, making a copy in zero or more files. The output is unbuffered.
Então, ele lê a entrada padrão e a copia para a saída padrão e, ao fazer isso, também duplica o fluxo em um ou vários arquivos.
No pipeline a seguir, tee
pegaria a saída do primeiro comando no pipeline e o copiaria na saída padrão (o terminal), ao mesmo tempo em que copia o arquivo nos arquivos one
, two
e three
:
$ somecommand | tee one two three
tee
tem muitos usos, um está em conjunto com sudo
para redirecionar a saída para um arquivo de propriedade do root:
$ somecommand | sudo tee /root/somefile >/dev/null
O seguinte não funcionou, já que o redirecionamento acontece como usuário não privilegiado (ele também executaria somecommand
como root, o que pode ser indesejado):
$ sudo somecommand >/root/somefile
Um exemplo artificial de anexar um conjunto fixo de linhas a muitos arquivos de uma vez (para todos os usuários ~/.profile
arquivos, assumindo que *
se expande para os nomes de usuário e que a linha de comando expandida não se torne muito longa para o shell para lidar com):
$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH
Um exemplo real de usar tee
:
time doas box-build.sh 2>&1 | tee build.out | grep '^=*>'
Isto é eu construindo o sistema básico do OpenBSD. doas
é o OpenBSD "equivalente" de sudo
e box-build.sh
é um pequeno script de shell que faz o prédio (essencialmente %código%). Eu gostaria de armazenar a saída de todo o processo de criação, incluindo quaisquer erros ou avisos, mas não quero ter tudo expelido no meu terminal. Para este fim eu uso cd /usr/src && make obj && make build
para salvar tudo em tee
e, em seguida, build.out
para obter apenas uma dica de onde no processo estamos no terminal.
Veja também as outras perguntas aqui marcadas com a tag tee .