나는 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
로그를 플러시하기 전에 화면 "exit" 명령이 반환되는 것 같습니다. 최종 화면 명령과 날짜 스탬프 사이에 지연을 추가하면 화면 시간이 로그 쓰기를 완료할 수 있게 됩니다. 또 다른 옵션은 "사용 중" 루프를 사용하여 로그가 기록될 때까지 기다리는 것입니다.
...
screen -S trans -X quit
while [ ! -s screenlog.0 ]
do
sleep 1
done
date +%F~%H:%M:%S >> screenlog.0
...