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

时间:2014-11-04 14:30:08

标签: bash

我已获得以下代码:

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

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

感谢@TomFenech

2 个答案:

答案 0 :(得分:4)

我建议不要使用循环,只需使用grep就可以简化:

tail -fn0 /var/log/messages | grep -q test
echo "Running information gathering"
# rest of script
第一场比赛后

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

答案 1 :(得分:1)

在BASH中,您可以使用glob匹配并避免grep

tail -fn0 /var/log/messages | 
while read -r line; do  
    if [[ "$line" == *test* ]]; then
       echo "Running information gathering"  
    fi  
done

PS:您可以使用grep -q代替根据找到的成功匹配获得正确的退出状态。