Программа не выполняется должным образом

У меня есть следующий сценарий оболочки bash, который в 90% случаев выполняет ожидаемые действия, но иногда это не так. Проблема в размещении даты и времени. Как показано, я сказал программе добавить дату в конец 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 _..._ из _... , а если нет, или если пользователь хочет еще один тестовый запуск, продолжить и подключиться к передатчику и возьмем данные. В конце создается файл screenlog.0 , к которому я хочу добавить дату и время в конце файла. Затем переименуйте его.

0
02.06.2017, 18:52
1 ответ

Похоже, экранная команда "quit" возвращалась перед очисткой журнала. Добавление задержки между последней командой экрана и меткой даты должно дать экрану время для завершения записи в журнал. Другим вариантом может быть использование цикла «занято» для ожидания записи журнала в:

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

Теги

Похожие вопросы