我有以下 bash shell 脚本,90% 的时间都可以完成预期的任务,但有时却不能。问题在于日期和时间的位置。如图所示,我已告诉程序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
似乎屏幕“退出”命令在刷新日志之前返回。在最终屏幕命令和日期戳之间添加延迟应该允许屏幕有时间完成写入日志。另一种选择是使用“忙”循环来等待日志写入:
...
screen -S trans -X quit
while [ ! -s screenlog.0 ]
do
sleep 1
done
date +%F~%H:%M:%S >> screenlog.0
...