
나는 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
...