프로그램이 예상대로 실행되지 않음

프로그램이 예상대로 실행되지 않음

나는 90%의 시간 동안 예상한 일을 수행하는 다음 bash 쉘 스크립트를 가지고 있지만 때로는 그렇지 않습니다. 문제는 날짜와 시간의 배치에 있습니다. 표시된 것처럼 프로그램 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

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

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

관련 정보