还有其他方法可以使用 tail -f 进行 grep -q && 操作吗?

还有其他方法可以使用 tail -f 进行 grep -q && 操作吗?

我找到了这个解决方案: https://stackoverflow.com/questions/7178888/grep-q-not-exiting-with-tail-f

但还有其他可能吗?

UPD:我想做,tail -f | grep -q something && echo 'found!'但它不起作用,因为 tail -f 阻止管道关闭,所以echo命令没有机会被执行。

答案1

请自行承担风险:

tail -n 0 -f /tmp/bar | { grep -q -m1 zoo && echo found ; pkill -P $$ '^tail$' ; }

pkill如果匹配项位于最后一行,则需要该命令。但可能会杀死tail后台的其他进程(如果有来自同一父进程的进程)。

答案2

我相信您想使用grep's-q-m选项。如果您想实际查看匹配的行,请使用-m1,它将打印该行并退出(发送 a SIGPIPEto tail,导致其退出)。如果您不想看到该行,请使用-q,它会在找到第一次出现时退出。

相关内容