![Bash:轮询文件创建并在退出时终止](https://linux22.com/image/76132/Bash%EF%BC%9A%E8%BD%AE%E8%AF%A2%E6%96%87%E4%BB%B6%E5%88%9B%E5%BB%BA%E5%B9%B6%E5%9C%A8%E9%80%80%E5%87%BA%E6%97%B6%E7%BB%88%E6%AD%A2.png)
我正在尝试编写一个捕获退出信号并终止的脚本。我不想使用通常的 bash 陷阱方法,而是希望每 10 秒监视一次文件创建,并在终止之前清理一些内容。
这是我尝试过的:
poll_time=10 // poll every 10 seconds
((term_time=$SECONDS+240)) // monitor until 4 min from current script time exec
while (( $SECONDS < $term_time)) do
if [[ -r $some_path/file.txt ]]; then
cleanup_function
exit
fi
sleep ${poll_time}
done
//if file doesnt exit continue with below code
//blah blah blah ....
有一个更好的方法吗?上面的代码行可以工作吗?
答案1
inotifywait
frominotify-tools
是你需要的(至少看看)。像这样的行将执行您的脚本想要执行的相同操作:
inotifywait -e create --timeout 240 "${some_path}/file.txt" && { cleanup_function; exit ; }
区别inotifywait
在于以基于事件的方式工作,因此不需要轮询或休眠。