Eu tenho este script (parcial) para gravar áudio:
#!/bin/sh
...
echo Recording to "$REC_FILE"
arecord [options] > "$REC_FILE" &
ARECORD_PID=$!
SYNC_COUNT=1
while kill -0 "$ARECORD_PID" > /dev/null 2>&1
do
sleep 1
# echo $SYNC_COUNT seconds
sync
SYNC_COUNT=$(($SYNC_COUNT+1))
done
echo Recording to "$REC_FILE" has ended.
que é chamado com record.sh >> "$LOGFILE" 2>&1 &
O motivo do relatório <number> seconds
de 1 segundo é porque arecord
não imprime informações de tempo com suas mensagens de erro em stderr
. Então, com isso, tenho que olhar ou ouvir uma gravação inteira que pode levar várias horas para tentar encontrar o que pode ou não ser um problema.
Eu consertei esse problema imediato imprimindo o contador de 1 segundo no mesmo arquivo de log para que a mensagem de erro termine com um timestamp acima e abaixo no arquivo, mas isso realmente confunde as coisas porque é sempre executando, mesmo quando as coisas estão funcionando muito bem.
Como posso adicionar o valor presente do contador às mensagens de erro de arecord
no arquivo de log sem sempre vomitar esse contador e sem atrapalhar a gravação de áudio em stdout como esta resposta parece fazer ? (ou isso?)
Em outras palavras, em vez disso, no arquivo de log, com o relatório do contador descomentado:
Recording to rec.wav
1 seconds
2 seconds
3 seconds
4 seconds
...
5093 seconds
arecord hiccuped but is still running
5094 seconds
...
10283 seconds
10284 seconds
Recording to rec.wav has ended.
Eu quero algo assim:
Recording to rec.wav
At 5093 seconds, arecord hiccuped but is still running
Recording to rec.wav has ended.
O formato exato do timestamp não importa, ou mesmo se estiver na mesma linha, contanto que eu ainda tenha a mensagem de erro original e a hora relativa ao início da gravação que aconteceu.