Até onde eu sei, cmd1 | tee verylong.txt | cmd2
não irá armazenar todo o arquivo na memória. De fato, se cmd2
precisasse esperar muito antes de consumir sua entrada, cmd1
poderia bloquear uma chamada write
e desbloquear somente quando cmd2
começasse a ler novamente.
A razão para isso é que há um buffer para o pipe e esse buffer, por padrão, está limitado a um determinado tamanho razoável .
Naturalmente, a história pode ser diferente se cmd2
for sort
(ou algo parecido) em que toda a entrada deve ser lida antes que o comando possa gravar sua saída. Nesse caso, todo o conteúdo do arquivo pode ser mantido em cmd2
memory, mas isso é independente se um pipe ou um arquivo intermediário foi usado para a entrada desse comando.