Em um script bash, eu gostaria de capturar a saída padrão de uma longa linha de comando por linha, para que eles possam ser analisados e relatados enquanto o comando inicial ainda está em execução. Esta é a maneira complicada que posso imaginar de fazer isso:
# Start long command in a separated process and redirect stdout to temp file
longcommand > /tmp/tmp$$.out &
#loop until process completes
ps cax | grep longcommand > /dev/null
while [ $? -eq 0 ]
do
#capture the last lines in temp file and determine if there is new content to analyse
tail /tmp/tmp$$.out
# ...
sleep 1 s # sleep in order not to clog cpu
ps cax | grep longcommand > /dev/null
done
Eu gostaria de saber se existe uma maneira mais simples de fazer isso.
EDITAR:
Para esclarecer minha pergunta, adicionarei isso. Ele longcommand
exibe seu status linha por linha uma vez por segundo. Eu gostaria de pegar a saída antes da longcommand
conclusão.
Dessa forma, eu posso matar o potencial longcommand
se ele não fornecer os resultados esperados.
Eu tentei:
longcommand |
while IFS= read -r line
do
whatever "$line"
done
Mas whatever
(por exemplo echo
) só é executado após a longcommand
conclusão.