正如有人指出的那样,使用文件修改时间可能很有用。我很快就完成了这个可能有用的脚本。它将等到自给定文件的最后修改时间以来经过 5 秒:
#!/bin/bash
function getTimeFromLastChange() {
file=${1}
let lastAccess=$(stat --format=%Y ${file})
let now=$(date +%s)
let timePassed=$((now - lastAccess))
echo ${timePassed}
}
file=./test
while [ true ]; do
let lastChange=$(getTimeFromLastChange ${file})
if [ "${lastChange}" -lt 5 ]; then
echo "waiting"
sleep 1
else
echo "done"
exit
fi
done
echo ${timePassed}
这里的关键是“getTimeFromLastChange”函数,它使用 stat (http://linux.die.net/man/1/stat) 获取给定文件自 unix 纪元时间以来的最后修改时间(以秒为单位)。然后,它将使用日期 (http://linux.die.net/man/1/date) 获取当前时间(同样,自 unix 纪元时间以来的秒数),减去它们,并计算自以来的总秒数最后修改时间。
主循环将等到一些“安全”的秒数过去。因此,您可以尝试调整此参数并打印几秒钟前写入/修改的文件。
示例运行:
marcelog@host ~ $ touch ./test
marcelog@host ~ $ ./try.sh
waiting
waiting
waiting
done
这不是 100% 安全的。但我认为值得一试。
希望能帮助到你!