我已获得以下代码:
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
答案 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
代替根据找到的成功匹配获得正确的退出状态。