我有一个bash脚本,我想让它每3秒检查一次日志中的短语,当它完成时-显示成功消息
我试过这样做,但是我没有看到状态每3秒更新一次:
until tail -f /path/server.log | grep -i 'Server has started succesfully'
do
echo Waiting ... '$date'
sleep 3
done
echo You are ready '$date'
done
你能给我解释一下是什么问题吗?
until
循环等待grep
完成。
你可能想要更像
while true; do
sleep 3
echo "Waiting ... $(date)"
done &
pid=$!
tail -f test.log | grep -iq --line-buffered 'Server has started succesfully'
kill "$pid"
还注意为grep
添加了-q
选项,以避免将其输出溢出到控制终端,以及用于打印日期的固定语法。(单引号防止展开,所以使用双引号;$date
不是一个定义的变量,所以我猜你的意思是调用date
命令。)如果日志文件增长缓慢,--line-buffered
选项到grep
可能是必要的。
演示:https://ideone.com/VK9dW0
tail -f test|while read; do
(echo $REPLY|grep -i 'Server has started succesfully') && break
done
但是你需要一些额外的超时条件