Com ksh93 , zsh ou bash :
logger | tee >(gzip > /tmp/log.txt.gz)
Isso usa esse recurso ksh chamado substituição de processo . >(gzip > /tmp/log.txt.gz) é substituído pelo caminho de um arquivo (normalmente algo como /dev/fd/something , mas que também pode ser um pipe nomeado temporário) que se refere ao fim da escrita de um cano. No outro (leitura) final desse pipe, o shell conecta a entrada padrão de um novo processo (executado em segundo plano) que executa o comando gzip .
Então, quando tee escreve para esse arquivo , ele está realmente enviando os dados para gzip .
Em sistemas com /dev/fd/n , você pode fazê-lo manualmente (com qualquer shell parecido com o Bourne, mas com ksh93) como:
{ logger | tee -a /dev/fd/3 | gzip > /tmp/log.txt.gz; } 3>&1
(embora nesse caso /dev/fd/3 se refira ao stdin original que disponibilizamos no descritor de arquivo 3 com 3>&1 , não ao pipe para gzip que aqui está apenas conectado a tee ' s stdout)
com zsh :
logger >&1 > >(gzip > /tmp/log.txt.gz)
Que usa o recurso zsh multios pelo qual zsh implementa uma espécie de tee internamente para redirecionar a mesma saída para mais de um arquivo (aqui o stdout original ( >&1 ) e o pipe para gzip usando a substituição do processo novamente.
logger será realmente o final de gravação de um pipe. No outro extremo do pipe está um processo de shell que lê e distribui as duas saídas como tee .