screen 导致“tail -F | grep”回显不匹配的行

screen 导致“tail -F | grep”回显不匹配的行

这是 Ubuntu(3.13.0-29-generic #53),尝试执行一个简单的 bash 脚本来监视日志文件中匹配的行。

如果我执行以下操作,则 bash shell 中除了匹配之外没有任何输出,这是预期的:

tail -F server.log | grep --line-buffered “word” | tee -a wordwatch.log

但是如果我尝试在屏幕上执行相同的操作,会话就会被来自监视日志文件的不匹配数据所淹没。显然它显示了监视日志文件中的所有内容。此数据淹没内容不会出现在输出日志文件中。

屏幕-S“ wordwatch”尾部-F server.log | grep --line-buffered“ word”| tee -a wordwatch.log

我做错了什么以及如何阻止监视的日志向屏幕会话发送垃圾邮件?

答案1

当您以这种方式启动管道时:

screen -S "wordwatch" tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log

然后只有tail -F server.log在内部启动screen,其余的都连接到screen,而不是tail

因此您应该调用已经可以运行的 bash 脚本:

screen -S "wordwatch" myworkingscript.sh

另一种方法是明确启动 shell 并将所有行传递给它:

screen -S "wordwatch" bash -c 'tail -F server.log | grep --line-buffered "word" | tee -a wordwatch.log'

另外,通过屏幕查看日志的另一种好方法是特殊配置:

#### logger.screenrc
sessionname     logger
hardstatus alwaysignore
split
split
screen  -t "Log One"  1 sh -c 'tail -F /a/b/c | egrep "xxxx" | tee -a '
focus
screen  -t "Log Two"  2 /home/somescript.sh
focus
screen  -t "Messages" 3 /home/otherscript.sh
focus
####

screen应该像这样调用:

# screen -c /home/logger.screenrc

要退出,只需按下<CTRL-A><CTRL-\>并确认。

相关内容