El programa no se ejecuta como se esperaba

El programa no se ejecuta como se esperaba

Tengo el siguiente script de bash shell que el 90% de las veces hace lo esperado, pero a veces no. El problema está en la colocación de la fecha y la hora. Como se muestra, le he dicho al programa que agregue dateal final de screenlog.0. La mayoría de las veces esto sucede correctamente. Sin embargo, a veces la fecha y la hora se añaden alcomienzode screenlog.0. Esto es realmente problemático ya que el formato screenlog.0debe cumplir con ciertas pautas. Cualquier ayuda sería 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

Esencialmente, el programa consiste en comprobar si dicounter_..._from_...ya existe, y si no, o si el usuario desea realizar otra prueba, proceder y conectarse a un transmisor y tomar datos. Al final, screenlog.0se crea un archivo al que quiero agregar la fecha y la hora al final del archivo. Luego cámbiale el nombre.

Respuesta1

Parece que el comando "salir" de la pantalla regresaba antes de vaciar el registro. Agregar un retraso entre el comando de pantalla final y la marca de fecha debería dar tiempo a que la pantalla termine de escribir en el registro. Otra opción sería utilizar un bucle "ocupado" para esperar a que se escriba el registro:

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

información relacionada