我正在使用 tail -f 来监视正在积极写入的日志文件。当某个字符串被写入日志文件时,我想退出监控,并继续我的脚本的其余部分。
目前我正在使用:
tail -f logfile.log | grep -m 1 "Server Started"
Run Code Online (Sandbox Code Playgroud)
找到字符串后,grep 按预期退出,但我需要找到一种方法使 tail 命令也退出,以便脚本可以继续。
我正在做一个非常标准的tail+ grep:
tail -f some_log_file.txt | grep -q known-string
Run Code Online (Sandbox Code Playgroud)
如果我运行没有以下命令的命令-q:
tail -f some_log_file.txt | grep known-string
Run Code Online (Sandbox Code Playgroud)
我看到输出:
[Tue Feb 12 11:32:45 2019] known-string.
Run Code Online (Sandbox Code Playgroud)
所以我知道grep是匹配的。但是,当我添加-qgrep 命令并没有退出时,它只是挂在那里等待更多输出......即使手册页说它会“如果找到任何匹配项,它将立即以零状态退出”:
Run Code Online (Sandbox Code Playgroud)-q, --quiet, --silent Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected. Also see the -s or --no-messages option.
谁能解释为什么-q不导致我的 grep 退出?我试图将 a 链接&& beep到最后,以便在grep找到匹配项时发出哔哔声,但除非我可以让它退出,否则将无法正常工作。
我想制作一个像这样的外壳管道:
producer | analyser > report.txt
Run Code Online (Sandbox Code Playgroud)
producer并在生成数据(一个大日志文件)时观察输出以进行分析。
我怎样才能做到这一点?