프로그램이 예상대로 실행되지 않습니다.

프로그램이 예상대로 실행되지 않습니다.

나는 90%의 시간 동안 수행해야 하는 작업을 수행하는 다음 bash 쉘 스크립트를 가지고 있지만 때로는 그렇지 않습니다. 문제는 날짜와 시간의 위치입니다. 표시된 대로 프로그램 datescreenlog.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

로그를 플러시하기 전에 화면 "exit" 명령이 반환되는 것 같습니다. 최종 화면 명령과 날짜 스탬프 사이에 지연을 추가하면 화면 시간이 로그 쓰기를 완료할 수 있게 됩니다. 또 다른 옵션은 "사용 중" 루프를 사용하여 로그가 기록될 때까지 기다리는 것입니다.

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

관련 정보