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

2

Estou escrevendo um script bash e gostaria que o último comando fosse iniciado como um processo separado. O último comando também envia toda a saída para um arquivo. Eu também, no entanto, 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, eu também quero ver a saída no console ao mesmo tempo (mas se eu apertar ctrl + c ou w / e, o comando não pára). Isso é muito parecido com pergunta , mas com o caviat que precisa ser o seu próprio fio.

Eu tentei:

$ command | tee "file" &

mas o problema é que tee é mais que parte do processo, e a saída não aparece de fato ..

Então, só para esclarecer, eu quero ter command em seu próprio processo, enviando a saída para um arquivo, mas ainda tenho a saída aparecendo no console (até que eu pressione q, enter, ctrl + c, ou algo ). Como isso está em um script bash, duas linhas separadas seriam aceitáveis.

    
por Humdinger 07.03.2014 / 05:10

1 resposta

2

Parece que você quer que command termine de gravar no arquivo, mas deseja interromper a exibição no console. Eu tomaria uma abordagem diferente para a solução. Em seu script:

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

Correção:

A resposta original usou -n 0 , que inicialmente não gera linhas de "file" , mas gera as linhas adicionadas a "file" depois que tail é iniciado. Esta não foi minha intenção - foi um erro. Eu pretendia usar uma opção que listasse todas as linhas de "file" mesmo se command tivesse escrito algumas antes de tail ter sido iniciado. A opção correta para esse comportamento é -n +1 .

Na página tail(1) man:

   -n, --lines=K   output the last K lines, instead of the last 10;
                   or use -n +K to output lines starting with the Kth

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

    
por 07.03.2014 / 06:00