我找到了这个解决方案: 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 SIGPIPE
to tail
,导致其退出)。如果您不想看到该行,请使用-q
,它会在找到第一次出现时退出。