
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 date
al 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.0
debe 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.0
se 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
...