
Eu tenho o seguinte script bash shell que 90% das vezes faz a coisa esperada, mas às vezes não. O problema está na colocação da data e hora. Como mostrado, eu disse ao programa para anexar date
no final de screenlog.0
. Na maioria das vezes, isso acontece corretamente. No entanto, às vezes a data e a hora são anexadas aocomeçode screenlog.0
. Isso é realmente problemático, pois o formato screenlog.0
precisa seguir certas diretrizes. Qualquer ajuda seria apreciada.
#!/bin/bash
...
...
if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt || [ -e "dicounter_${string1}_from_${string2}" ];
then
echo "dicounter_${string1}_from_${string2} already exists in the MasterFile or the current directory. Would you like to proceed?"
read string3
if [[ "${string3^}" == 'Y' ]]; then
echo "How many times has this dicounter been retested? (e.g. 1 for first time, 2 for the second, ...)"
read string4
screen -S trans -L /dev/ttyACM0
screen -S trans -X stuff 's'$(echo -ne '\015')
sleep 8s
screen -S trans -X quit
date +%F~%H:%M:%S >> screenlog.0
mv screenlog.0 dicounter_${string1}_from_${string2}~${string4}
else
exit 0
fi
else
#opening screen & begin analysis
screen -S trans -L /dev/ttyACM0
screen -S trans -X stuff 's'$(echo -ne '\015')
sleep 8s
screen -S trans -X quit
date +%F~%H:%M:%S >> screenlog.0
mv screenlog.0 dicounter_${string1}_from_${string2}
fi
Essencialmente, o programa deve verificar se dicounter_..._from_...
já existe, e se não, ou se o usuário deseja outro teste, prossiga e conecte-se a um transmissor e obtenha dados. No final, screenlog.0
é criado um arquivo ao qual desejo anexar a data e a hora no final do arquivo. Em seguida, renomeie-o.
Responder1
Parece que o comando "quit" da tela estava retornando antes de liberar o log. Adicionar um atraso entre o comando final da tela e o carimbo de data deve permitir que a tela termine de gravar no log. Outra opção seria usar um loop "ocupado" para aguardar a gravação do log:
...
screen -S trans -X quit
while [ ! -s screenlog.0 ]
do
sleep 1
done
date +%F~%H:%M:%S >> screenlog.0
...