Programa não executa como esperado

0

Eu tenho o seguinte script de shell que 90% do tempo faz o esperado, mas às vezes não. O problema é com a colocação da data e hora. Como mostrado, eu disse ao programa para anexar o 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 ao início de screenlog.0 . Isso é realmente problemático, pois o formato de screenlog.0 precisa obedecer a determinadas 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 '5')
      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 '5')
  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 o dicounter_..._from_... já existe e, se não, ou se o usuário quiser outro teste, prossiga e conecte-se a um transmissor e obtenha dados. No final, um arquivo screenlog.0 é criado, ao qual desejo anexar a data e a hora no final do arquivo. Então renomeie.

    
por Ptheguy 02.06.2017 / 16:58

1 resposta

1

Parece que o comando "sair" da tela estava retornando antes de liberar o log. Adicionar um atraso entre o comando final da tela e o registro de data deve permitir que a tela termine de gravar no registro. Outra opção seria usar um loop "ocupado" para aguardar que o log seja gravado em:

...
screen -S trans -X quit
while [ ! -s screenlog.0 ]
do
  sleep 1
done
date +%F~%H:%M:%S >> screenlog.0
...
    
por 02.06.2017 / 21:02