O que eu gostaria de fazer é executar um comando, gravar toda a saída em um arquivo e exibir as primeiras n linhas.
neste exemplo n=10
Uma solução que eu realmente não gosto é:
./program > tempfile ; cat tempfile >> thefile ; head -n 10 tempfile
O que eu tentei é
./program | tee -a thefile | head -n 10
No entanto, aqui o problema é que ./program é encerrado prematuramente
Existe algum truque sem criar um arquivo temporário intermediário. (como um comando head apenas exibindo as primeiras n linhas, mas continuando a ler o restante silenciosamente)
Uma maneira de reproduzir o problema com o pipeline e o cabeçote é:
n=0 ; while [[ $n -lt 200 ]] ; do echo ======================== $n ; n=$((n + 1)) ; done | tee -a toto | head -n 3 ; echo "-" ; tail -n 200 toto
Na verdade, para mim, a última linha do arquivo toto
é aleatória e varia, mas quase nunca é a linha 199.
Hmm, respondendo minha própria pergunta.
Mas talvez haja algo melhor?