2016-09-19 141 views
1

我必须读取日志直到我收到“ Server Startup ”。BASH Linux退出读取日志直到指定字符串

当我得到字符串“ startup ”,我必须退出tail命令并继续处理其余的脚本操作。

现在的语法是:提前

cd /opt/path/path/path 
LOG_FILE=$(ls -ltr | tail -1 |awk '{print $9}') 
tail -f $LOG_FILE 

感谢

+0

使用'ls -lrt'在目录中查找最新文件不是一个好主意。你最新的文件名是什么包含空间?例如''latest file'' –

回答

4
stdbuf -oL tail -f log.file | stdbuf -iL awk '/startup/ {print "Match found";exit}' 

这将检查字符串startup,当它被发现,它会打印“匹配发现”,然后从日志退出监控。 stdbuf提供缓存到tail和awk的行。

+0

我推荐使用'stdbuf'来强制'tail'写入缓冲行和'awk'来读取stdin行缓冲。 Otherwiese脚本将不得不等待,直到IO缓冲区被刷新。像这样:'stdbuf -oL tail -f log.file | stdbuf -iL awk ...' – hek2mgl

+1

@ hek2mgl,谢谢。 Point指出。 –

+0

感谢您的可用性 – Luca