错误的尾部语法或 grep 命令?

And*_*all 6 bash

我得到了以下代码:

tail -fn0 /var/log/messages | \  
while read line ; do  
       echo "$line" | grep "test"  
       if [ $? = 0 ]  
       echo "Running information gathering"  
       then  
etc...etc  
Run Code Online (Sandbox Code Playgroud)

它应该做的是持续监视“/var/tmp/messages”文件的添加行,如果其中包含“test”一词,则执行脚本的其余部分并在完成后退出。
只要将任何行添加到消息文件中,它就会执行脚本的其余部分,而不管行的内容如何。我添加了 echo 命令,并且 $line 正确包含了新的日志文件行。我尝试将测试“$? = 0”更改为“$? = 1”,但没有任何区别。
有人可以给我一个指针吗?

谢谢@TomFenech

Tom*_*ech 6

我建议不要使用循环,您可以通过使用 grep 使事情变得更简单:

tail -fn0 /var/log/messages | grep -q test
echo "Running information gathering"
# rest of script
Run Code Online (Sandbox Code Playgroud)

grep -q 在第一场比赛后退出,因此一旦找到第一场比赛,您的脚本就会继续。