Comando para imprimir saída para console e arquivo ao mesmo tempo em threads diferentes

Comando para imprimir saída para console e arquivo ao mesmo tempo em threads diferentes

Estou escrevendo um script bash e gostaria que o último comando iniciasse como um processo separado. O último comando também envia toda a saída para um arquivo. No entanto, também quero que a saída ainda apareça no console. O que eu tenho até agora é,

$ command > "file" &

Isso envia a saída para “arquivo” e também inicia o comando como seu próprio processo. No entanto, também quero ver a saída no console ao mesmo tempo (mas se eu pressionar ctrl+c ou w/e, o comando não para). Isso é muito parecidoessa questão, mas com a ressalva de que precisa ser um thread próprio.

Eu tentei:

$ command | tee "file" &

mas o problema é que tee faz parte do processo e a saída na verdade não aparece.

Então, só para esclarecer, quero ter commandum processo próprio, enviando a saída para um arquivo, mas ainda fazer com que a saída apareça no console (até eu apertar q, enter, ctrl+c ou algo assim). Como se trata de um script bash, duas linhas separadas seriam aceitáveis.

Responder1

Parece que você deseja commandterminar de gravar no arquivo, mas deseja interromper a exibição no console. Eu adotaria uma abordagem diferente para a solução. No seu roteiro:

> "file"
command > "file" &
tail -n +1 -F "file"

Correção:

A resposta original usada -n 0, que inicialmente não gera nenhuma linha, "file"mas gera todas as linhas adicionadas "file"após tailo início. Esta não foi minha intenção – foi um erro. Eu pretendia usar uma opção que listasse todas as linhas "file"mesmo que commandtivesse escrito algumas antes de tailser iniciado. A opção correta para esse comportamento é -n +1.

Na tail(1)página de manual:

   -n, --lines=K exibe as últimas K linhas, em vez das últimas 10;
                   ou use -n +K para gerar linhas começando com K-ésimo

A primeira linha limpa o conteúdo do arquivo no caso de uma condição de corrida em que tailo arquivo é atingido antes command.

informação relacionada