Somente último tee escreve para arquivo (possível sobreposição com exec?)

1

Eu tento ter todas as minhas saídas redirecionadas para a.out , exceto algumas que devem também ser gravadas em b.out . Eu acho que usar exec em cima de tee (tee para também redirecionar para b.out) seria bom, mas tee não parece ter sempre o mesmo comportamento (apenas o último parece funcionar):

#!/bin/bash
exec > a.out
ls /boot |tee  b.out  #redirected to a.out only!
ls /var  |tee  b.out  #redirected to a.out only!
ls /run  |tee  b.out  #redirected to a.out only!
ls /home |tee  b.out  #redirected to a.out and b.out (good)
echo "a"              #redirected to a.out (good)

Mesma coisa para o ksh. Para informações, nenhum dos ls causa um erro. Por que des tee às vezes não consegue bifurcar a saída?

    
por Vulpo 26.03.2018 / 17:27

1 resposta

4

Todo tee abre b.out sozinho e sobrescreve sozinho. No final você verá b.out do último tee apenas (observe que isso é independente do exec anterior, então o título original da pergunta " tee inside exec , comportamento de redirecionamento aleatório" foi bastante enganador) .

Se você examinou b.out entre tee -s, perceberá que ele contém a saída dotee anterior apenas. Você pode fazer isso digitando seus comandos um a um (sem redirecionar para a.out ) e invocando cat b.out após cada.

O redirecionamento para a.out é um pouco diferente. Quando você exec , a.out é aberto pelo shell apenas uma vez e tudo que é redirecionado para ele é anexado.

Solução: use tee -a . De man tee :

-a, --append
append to the given FILEs, do not overwrite

    
por 26.03.2018 / 17:35