Assumindo o seguinte comando fictício no bash:
### dummy long_operation_cmd function, for easy reproduction:
function long_operation_cmd() {
echo "operation 1"
sleep 5
echo "operation 2"
}
Atualmente estou executando um script bash da seguinte maneira:
{
long_operation_cmd
echo '===ALL DONE==='
} > /tmp/logfile.tmp &
tail -f /tmp/logfile.tmp | sed '/^===ALL DONE===$/ q' \
&& rm /tmp/logfile.tmp
Isso me permite executar a operação longa com segurança em segundo plano, rastrear a saída e garantir que Ctrl+C não interrompa a execução.
Mais importante ainda, quando a operação é feita, sed
me tira do modo de acompanhamento.
Eu quero substituir tail -f
por less +F
, e foi isso que eu criei:
{
long_operation_cmd
echo '===ALL DONE==='
} > /tmp/logfile.tmp &
less +F -- /tmp/logfile.tmp \
&& rm /tmp/logfile.tmp
No entanto, não consigo descobrir uma maneira de sair do modo de acompanhamento automaticamente quando o ===ALL DONE===
padrão é atingido (ou quando a long_operation_cmd
operação é concluída).
Alguma sugestão para resolver isso?