
У меня есть следующий скрипт оболочки bash, который в 90% случаев делает ожидаемое, но иногда нет. Проблема в размещении даты и времени. Как показано, я сказал программе добавить date
в конец screenlog.0
. В большинстве случаев это происходит правильно. Однако иногда дата и время добавляются кначалоиз screenlog.0
. Это действительно хлопотно, так как формат screenlog.0
должен соответствовать определенным правилам. Любая помощь будет оценена по достоинству.
#!/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
По сути, программа должна проверить, dicounter_..._from_...
существует ли уже, и если нет, или если пользователь хочет еще один тестовый запуск, продолжить и подключиться к передатчику и взять данные. В конце screenlog.0
создается файл, к которому я хочу добавить дату и время в конце файла. Затем переименовать его.
решение1
Похоже, что команда screen "quit" возвращалась до сброса журнала. Добавление задержки между последней командой screen и отметкой даты должно дать экрану время для завершения записи в журнал. Другим вариантом было бы использование цикла "busy" для ожидания записи журнала в:
...
screen -S trans -X quit
while [ ! -s screenlog.0 ]
do
sleep 1
done
date +%F~%H:%M:%S >> screenlog.0
...